c - non-blocking connect() and select() with zero timeout is returning 0 -



c - non-blocking connect() and select() with zero timeout is returning 0 -

i'm writing single-threaded app handless several connected tcp sockets in loop. here's part initiates connection:

// set connecting socket wire[wi].skt=socket(af_inet,sock_stream | sock_nonblock,ipproto_tcp); if (wire[wi].skt==-1) homecoming tec_sock_err; wire[wi].sai.sin_family=af_inet; memmove(&wire[wi].sai.sin_addr,&rconf.txaddr,sizeof(struct in_addr)); wire[wi].sai.sin_port=htons(rconf.txport); // initiate connection int cres = connect(wire[wi].skt,(struct sockaddr *)&wire[wi].sai,sizeof(struct sockaddr_in)); // comprehend results if (cres==0) { // connect established wire[wi].state=connected; homecoming 0; }; if (cres==-1) // socket error meaning depends on errno switch (errno) { // ok non-blocking sockets case einprogress : { // connect initiated wire[wi].state=connecting; homecoming 0; }; default : homecoming tec_sock_err; }; homecoming 0; // should not happen

obviously, einprogress case here, there's code within loop

case connecting : { struct timeval tv; fd_set rfds; fd_zero(&rfds); fd_set(wire[wc].skt,&rfds); memset(&tv,0,sizeof(struct timeval)); int retval = select(1,null,&rfds,null,&tv); printf("%d:%d ",retval,errno); fflush(stdout); // done break; };

what don't why select here returns 0 , eagain, regardless of whether connection successful or not.

i'm in search reliable way of telling if connection (not)successful on non-blocking socket. in advance.

upd. seems there's no apparent mistakes, i'll mwe find somewhere else stupid :)

int retval = select(1,null,&rfds,null,&tv);

the first parameter of select not number of fds, (from linux man page):

nfds highest-numbered file descriptor in of 3 sets, plus 1.

unless socket has fd 0 (in case must have closed stdin) value of 1 utilize wrong. means of fds in set less nfds (i.e. none) ready , select returns 0. code should instead:

int retval = select( 1+wire[wc].skt, null,&rfds,null,&tv);

c sockets tcp posix nonblocking

Comments

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -