Estoy portando una aplicación de red de Windows a Linux y tuve que enfrentar un problema de tiempo de espera con Select Call en Linux. La siguiente función bloquea el valor de tiempo de espera completo y regresa mientras comprobé con un sniffer de paquete que el cliente ya ha enviado los datos.Socket select() funciona en Windows y agota el tiempo de espera en Linux
int recvTimeOutTCP(SOCKET socket, long sec, long usec)
{
struct timeval timeout;
fd_set fds;.
timeout.tv_sec = sec;
timeout.tv_usec = usec;
FD_ZERO(&fds);
FD_SET(socket, &fds);
// Possible return values:
// -1: error occurred
// 0: timed out
// > 0: data ready to be read
cerr << "Waiting on fd " << socket << endl;
return select(1, &fds, 0, 0, &timeout);
}
@jamessan Ah, sí, quise decir eso;) – epatel
Sí, gracias, eso resolvió mi problema. –
Derecha. 'int select (int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval * timeout);' donde nfds es 'el descriptor de archivo de mayor numeración en cualquiera de los tres conjuntos, más 1'. – jamessan