LW, А что так страшит сохранить 4 байта с того самого accept?
Это из help libc
Who is Connected to Me?
int getpeername (int socket, struct sockaddr *addr, socklen_t *length-ptr) Function
The getpeername function returns the address of the socket that socket is connected to; it stores the address in the memory space specified by addr and length-ptr. It stores the length of the address in *length-ptr.
See Socket Addresses, for information about the format of the address. In some operating systems, getpeername works only for sockets in the Internet domain.
The return value is 0 on success and -1 on error. The following errno error conditions are defined for this function:
EBADF
The argument socket is not a valid file descriptor.
ENOTSOCK
The descriptor socket is not a socket.
ENOTCONN
The socket socket is not connected.
ENOBUFS
There are not enough internal buffers available.
Но думаю, подобная функция есть и под винду.