¿Cómo puedo intentar leer datos del socket con tiempo de espera? Lo sé, select, pselect, poll, tiene un campo de tiempo de espera, pero su uso desactiva "tcp fast-path" en tcp reno stack.
La única idea que tengo es usar recv (fd, ..., MSG_DONTWAIT) en un bucle

Respuestas:
Puede utilizar la función setsockopt para establecer un tiempo de espera en las operaciones de recepción:
Según se informa, en Windows, esto debe hacerse antes de llamar
bind. He verificado mediante un experimento que se puede hacer antes o despuésbinden Linux y OS X.fuente
struct timeval tv;, ¿significa que select () no funcionará también? Intenté portar mi código select () a Windows y simplemente se agota inmediatamente, parece que está ignorando el valor que estoy configurando en timeval.Aquí hay un código simple para agregar un tiempo de espera a su
recvfunción usandopollen C:fuente
pollesperará recibir al menos un byte o timeout, mientras que al llamar a larecvfunción esperarásizeof(buf)bytes, provocando que se bloquee nuevamente si aún no ha llegado este conteo, pero esta vez sin tener timeout.// funciona también después de la operación de vinculación para WINDOWS
fuente
Instale un controlador para
SIGALRM, luego usealarm()oualarm()antes de un bloqueo regularrecv(). Si la alarma se dispara,recv()devolverá un error con elerrnoajuste aEINTR.fuente
LINUX
VENTANAS
NOTA : ha puesto esta configuración antes de la
bind()llamada de función para una ejecución adecuadafuente