Zócalo no bloqueante

Un socket no bloqueante es aquel en el que llamamos el método fcntl () y asociamos el indicador O_NONBLOCK con él. ¿Puede alguien decirme qué más se requiere para convertir un socket TCP_IP normal en un socket no bloqueante?

¿Qué problemas pueden surgir si los sockets no bloqueantes funcionan correctamente con los servidores de Windows?

El ejemplo init para Linux puede verse así:

int flags; s = socket(PF_INET, SOCK_STREAM, IPPROTO_IP) // ret 5 setsockopt(s, SOL_TCP, TCP_NODELAY, [1], 4) setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, [1], 4) setsockopt(s, SOL_SOCKET, SO_REUSEADDR, [1], 4) flags = fcntl(s,F_GETFL,0); assert(flags != -1); fcntl(s, F_SETFL, flags | O_NONBLOCK); connect(s, {sa_family=AF_INET, sin_port=htons(5001), sin_addr=inet_addr("192.168.0.68")}, 16) 

Papel blanco básico de sol:

red solar asych

En Windows, usted usa sockets IO superpuestos para obtener redes no bloqueadas.

Mire aquí y en MSDN cómo escribir código con estructuras OVERLAPPED

En Linux usa epoll ().

En la toma de solaris ().

Esté atento a leer o escribir en un socket cuando no esté listo. (selección-salida) Porque puede recibir un error EAGAIN.

La gran biblioteca multiplataforma (pero C ++ y el nuevo candidato estándar de c ++) es boost :: asio.

Utiliza métodos asíncronos del sistema nativo.

impulso :: asio