Cómo emular socket.socketpair en Windows

Lamentablemente, la función socket.socketpair de Python estándar no está disponible en Windows (a partir de Python 3.4.1), ¿cómo puedo escribir un reemplazo que funcione en Unix y Windows?

import socket import errno def create_sock_pair(port=0): """Create socket pair. If socket.socketpair isn't available, we emulate it. """ # See if socketpair() is available. have_socketpair = hasattr(socket, 'socketpair') if have_socketpair: client_sock, srv_sock = socket.socketpair() return client_sock, srv_sock # Create a non-blocking temporary server socket temp_srv_sock = socket.socket() temp_srv_sock.setblocking(False) temp_srv_sock.bind(('', port)) port = temp_srv_sock.getsockname()[1] temp_srv_sock.listen(1) # Create non-blocking client socket client_sock = socket.socket() client_sock.setblocking(False) try: client_sock.connect(('localhost', port)) except socket.error as err: # EWOULDBLOCK is not an error, as the socket is non-blocking if err.errno != errno.EWOULDBLOCK: raise # Use select to wait for connect() to succeed. import select timeout = 1 readable = select.select([temp_srv_sock], [], [], timeout)[0] if temp_srv_sock not in readable: raise Exception('Client socket not connected in {} second(s)'.format(timeout)) srv_sock, _ = temp_srv_sock.accept() return client_sock, srv_sock 

Python 3.5 incluye soporte de Windows para socket.socketpair() . Para Python 2.7+, puedes usar el paquete backports.socketpair (que yo escribí) en PyPi:

 import socket import backports.socketpair s1, s2 = socket.socketpair()