|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
posso introdurre un timeout anche alle recv??
ho pensato che si possa fare così, ma purtroppo sbaglio mi entra in loop... come posso fare? grazie Codice:
SOCKET sd;
fd_set fds;
struct timeval timeout;
unsigned long cmd;
// definizione strutture .....
// ...
if ((sd=socket(AF_INET,SOCK_STREAM,0))<0)
{ printf("err:sock\n");
exit(-1);
}
// imposto socket non boccante
cmd=1;
ioctlsocket( sd, FIONBIO, &cmd);
// dati per Select
timeout.tv_sec = 3; // numero di secondi per il timeout
timeout.tv_usec = 0; // numero di microsecondi per il timeout
FD_ZERO(&fds);
FD_SET(sd, &fds); // aggiungo sd all'elenco dei socket gestiti da select
// ritorna sempre l'errore WSAEWOULDBLOCK!!
connect(sd,(struct sockaddr *)&rem_ind,sizeof(struct sockaddr_in));
if (select(sd+1, 0, &fds, 0, &timeout)>0) //il primo argomento di select è ignorato sotto windows
{
printf("# connesso\n");
//**************************** MIA MODIFICA **************
recv(s, msg_response, 1, 0);
if(select(sd+1, 0, &fds, 0, &timeout)>0){
printf("# ricevuto un byte!\n");
else
printf("# timeout!\n");
}
else printf("# timeout!\n");
__________________
http://mamo139.altervista.org |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:22.



















