Odczytuję z gniazda przy użyciu funkcji recv
. Mam problem, gdy brak danych do czytania. Mój program się zatrzymuje. Zauważyłem, że mogę ustawić limit czasu przy użyciu funkcji select
. Ale wygląda na to, że timeout wpływa na samą funkcję wyboru, a recv
, która przechodzi po wybraniu, wciąż czeka w trybie ciągłym.Ustawianie limitu czasu na funkcję 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)
{
...
}
Jak poprosić o powrót funkcji po pewnym czasie oczekiwania?
Przykład ten kod ma błąd ... linię który czyta: 'int rv = select (s, & set, NULL, NULL i timeout);' powinien przeczytać 'int rv = select (s + 1, & set, NULL, NULL i timeout);' – drbobdugan
Dziękuję bardzo, ty rzeczywiście ma rację! 'nfds' jest deskryptorem pliku o najwyższym numerze + 1. –