To determine if the socket is connected, it is more usual to use getsockopt()
rather than getpeername()
:
int so_error;
socklen_t len = sizeof(so_error);
getsockopt(sock, SOL_SOCKET, SO_ERROR, &so_error, &len);
if (so_error == 0) {
/* socket is connected */
}