Sto eseguendo il porting di un'applicazione di rete Windows su linux e ho dovuto affrontare un problema di timeout con select call su linux. I seguenti blocchi funzione per l'intero valore di timeout e ritorni mentre ho controllato con uno sniffer di pacchetti che il client ha già inviato i dati.Socket select() funziona in Windows e timeout in 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ì mi ha fatto sì che;) – epatel
Sì, grazie, che ha risolto il mio problema. –
Giusto. 'int select (int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval * timeout);' dove nfds è 'il descrittore di file con il numero più alto in uno qualsiasi dei tre set, più 1'. – jamessan