<Gabrik>
20-10-2013, 12:04
Salve gente, ho un problemino, dovrei settare un timeout umano (Linux mi sembra dia timeout dopo 72 secondi) dopo una connect(), cosė se l'host č down non ho bisogno di attendere tutto quel tempo, so che dovrei settare il socket come non bloccante e poi usare la select, ma non ho ben chiaro come fare, vi posto la parte di codice interessata
int sock;
struct sockaddr_in sock_in;
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
fcntl(sock, F_SETFL, 0); //questa dovrebbe diventare fcntl(sock,F_SETFL, O_NONBLOCK);
sock_in.sin_family=AF_INET;
sock_in.sin_port=htons(conf->getPort());
sock_in.sin_addr.s_addr=inet_addr(conf->getServer().c_str());
conf->setSin(sock_in);
conf->setSockfd(sock);
if(conf->debug==true)
cout<<"Connecting to server "<<conf->getServer()<<":"<<conf->getPort()<<endl;
//qui dovrei poi controllare se ritorna qualcosa di diverso da EINPROGESS giusto?
if(connect(sock,(struct sockaddr*)(&sock_in),sizeof(struct sockaddr_in))<0){
perror("Connessione Socket Fallita");
return false;
}
//qua dovrebbe andare tutto il controllo della select
int sock;
struct sockaddr_in sock_in;
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
fcntl(sock, F_SETFL, 0); //questa dovrebbe diventare fcntl(sock,F_SETFL, O_NONBLOCK);
sock_in.sin_family=AF_INET;
sock_in.sin_port=htons(conf->getPort());
sock_in.sin_addr.s_addr=inet_addr(conf->getServer().c_str());
conf->setSin(sock_in);
conf->setSockfd(sock);
if(conf->debug==true)
cout<<"Connecting to server "<<conf->getServer()<<":"<<conf->getPort()<<endl;
//qui dovrei poi controllare se ritorna qualcosa di diverso da EINPROGESS giusto?
if(connect(sock,(struct sockaddr*)(&sock_in),sizeof(struct sockaddr_in))<0){
perror("Connessione Socket Fallita");
return false;
}
//qua dovrebbe andare tutto il controllo della select