Cita de: dgrr19 en 10 Marzo 2020, 20:34 PM
No es necesario que uses sockets no bloqueantes. Los sockets no bloqueantes lo unico que hacen es no esperar a que se realiza la operacion, es decir, que si usas `read(socket, buf, size)` en el momento en el que la llamada vaya a bloquear porque tiene que esperar al otro peer entonces retorna un -1 con errno = EAGAIN o EWOULDBLOCK.
Estoy de acuerdo contigo en que para la funcionalidad normal de mi programa no es necesario usar sockets NO BLOQUEANTES, lo que me genera la duda es lo que dice la respuesta del link que adjunto con el tema. En esa respuesta explica que debido a la implementación en LINUX, usar sockets BLOQUEANTES y select en principio no deberían generar problemas la mayoría de las veces, sin embargo menciona que puede succeder un caso en el que SELECT notifique que un socket esta como READY para leer, pero sin embargo el mensaje que llega puede ser descartado por la proxima comprobación del CHECKSUM, esto haciendo que realmente el recv que supone que no debería ser tan tardado debido a que SELECT nos notifico que estaba listo, bloque finalmente todo el hilo esperando a que realmente llegue una información valida y se cree un pequeño deficit. Claro que si las cosas son así esto puede crear un BUG en casos donde el socket es de tipo DATAGRAM(UDP) debido a que no se tiene la certeza de un mensaje va llegar pronto creando que el hilo solo este esperando un recv de un cliente y este ignorando todos los demas que han sido adjuntados al SELECT.En el caso de TCP se tiene la certeza de que va ser un plazo no tan largo debido a que se detecataria el paquete rechazado y se reenviaria en un plazo de tiempo finito.
Cita de: dgrr19 en 10 Marzo 2020, 20:34 PM
A lo mejor tendrias que mirar epoll. Epoll a parte de ser mas rapido, a mi manera de ver las cosas es mas facil de usar.
He visto un poco sobre el, le voy a dar una checada, gracias.
La verdad no estoy del todo seguro de que esto realmente pueda succeder, o que realmente valga la pena intentarlo evitar pensando en que es muy poco posible que se presente.