windows o linux?
qui una semplice traccia per windows:
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");
//ripristino socket bloccante
cmd=0;
ioctlsocket( sd, FIONBIO, &cmd);
// invio-ricezione dati su socket in modo bloccante (tradizionale)
// ....
}
else printf("# timeout!\n");
se operi su linux devi sostiruire la funzione ioctlsocket() con ioctl()... ma su linux non ho testato il codice...