Ho letto dalla presa utilizzando la funzione recv
. Ho un problema quando nessun dato disponibile per la lettura. Il mio programma si ferma. Ho scoperto che posso impostare il timeout usando la funzione select
. Ma guarda che il timeout influisce sulla funzione di selezione stessa e su recv
che va dopo che la selezione è ancora in attesa ininterrottamente.Impostazione del timeout per la funzione di recv
fd_set set;
struct timeval timeout;
FD_ZERO(&set); /* clear the set */
FD_SET(s, &set); /* add our file descriptor to the set */
timeout.tv_sec = SOCKET_READ_TIMEOUT_SEC;
timeout.tv_usec = 0;
int rv = select(s, &set, NULL, NULL, &timeout);
if((recv_size = recv(s , rx_tmp , bufSize ,0)) == SOCKET_ERROR)
{
...
}
Come chiedere recv
funzione di ritorno dopo qualche timout?
Questo esempio di codice contiene un errore ... la linea che dice: 'int rv = seleziona (s, & set, NULL, NULL e timeout);' dovrebbe leggere 'int rv = select (s + 1, & set, NULL, NULL, e timeout);' – drbobdugan
Grazie mille, tu hai ragione davvero! 'nfds' è il descrittore di file con il numero più alto + 1. –