Zócalo sin bloqueo

1 minuto de lectura

Zocalo sin bloqueo
Sachin Chourasiya

Un socket sin bloqueo es aquel en el que llamamos al método fcntl() y le asociamos el indicador O_NONBLOCK. ¿Alguien puede decirme qué más se requiere para convertir un socket TCP_IP normal en un socket sin bloqueo?

¿Qué problemas pueden surgir si se hacen que los sockets sin bloqueo funcionen muy bien con los servidores de Windows?

  • Suena demasiado a tarea. Segunda pregunta, no puedo encontrar un proyecto factible que requiera dos piezas muy dispares de programación elemental del sistema operativo.

    – Stefan Mai

    06 oct.

  • En realidad, está destinado a ser utilizado para no esperar el tráfico entrante en un entorno en línea.

    – Sachin Chourasiya

    06 oct.

Zocalo sin bloqueo
bueno

El ejemplo de inicio 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)

Libro blanco básico del sol:

sol asych red

En Windows, utiliza sockets de E/S superpuestos para obtener redes sin bloqueo.

Mira aquí y en MSDN cómo escribir código con estructuras SUPERPUESTAS

En Linux use epoll().

En el zócalo solaris().

Tenga cuidado de leer o escribir en un socket cuando no esté listo. (seleccionar 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 asincrónicos del sistema nativo.

impulso::asio

  • ¿Hay alguna forma de lograr esto en C? ¿Qué se debe cuidar si se usa en servidores Windows o Linux?

    – Sachin Chourasiya

    06 oct.

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad