Non blocage socket de connexion, sélectionnez() retourne toujours 1

J'ai ce segment de code qui est conçu pour se connecter à un serveur à l'aide d'une connexion de socket. Toutefois, si elle ne peut pas se connecter au serveur à l'intérieur d'un certain laps de temps, j'aimerais qu'il arrêter d'essayer. J'ai essayé de le faire avec ce socket non bloquante et sélectionnez la commande de sélection, mais est toujours retourner 1, indiquant que le serveur existe quand rien n'existe à l'adresse que j'ai donner. Des Idées?

SOCKET tcp_client( char *hname, char *sname )  {    
fd_set fdset;
struct sockaddr_in peer;
SOCKET s;
FD_ZERO(&fdset);
//FD_SET(STDIN, &fdset);
FD_SET(s, &fdset);
errno=1;
struct timeval tv;
tv.tv_sec = 15;
set_address( hname, sname, &peer, "tcp" );
s = socket( AF_INET, SOCK_STREAM, 0 );
int n = 1;
fcntl(s, F_SETFL, O_NONBLOCK);
if ( !isvalidsock( s ) )
{
printf("Socket Call Failed: %s\n", strerror(errno));
return(0);
}
int x = 0;
int status = connect( s, ( struct sockaddr * )&peer, sizeof( peer ) );
if(status < 0) {
printf("Status: %i\n", status); 
}
int retVal = select(s+1, &fdset, NULL, NULL, &tv);
printf("retVal: %i\n", retVal);
if (retVal == 1) {
int so_error;
socklen_t slen = sizeof so_error;
getsockopt(s, SOL_SOCKET, SO_ERROR, &so_error, &slen);
if (so_error == 0) {
printf("work\n");
x =1;
} else {
printf("fail\n");
x = 0;
}
} else {     
printf("noSocks\n"); 
}
if (x ==0 )
{
printf("Connect Failed: %s\n", strerror(errno));
L("libOnexc: Connect to socket failed");
close(s);
return(0);
} 
return s;
}
  • Veuillez corriger votre mise en retrait. C'est horrible!!!
  • Eh bien, je ne vais pas attendre sur plus d'attendre 15 secondes à l'aide de select() pour voir si il est connecté, mais le select est toujours le retour de ses connecté lors de ses pas.
InformationsquelleAutor Daniel | 2011-04-30