diff --git a/src/sbbs3/ident.c b/src/sbbs3/ident.c index 38062ffca096fe23eb87a44c49c402a9dcc5eda1..ca4168fcbc983f8f08084f8340db00d067d4207f 100644 --- a/src/sbbs3/ident.c +++ b/src/sbbs3/ident.c @@ -42,9 +42,13 @@ char* identify(SOCKADDR_IN* client_addr, u_short local_port, char* buf, size_t m { char req[128]; char* identity=NULL; + int i; int rd; SOCKET sock=INVALID_SOCKET; SOCKADDR_IN addr; + struct timeval tv; + fd_set socket_set; + do { if((sock = open_socket(SOCK_STREAM)) == INVALID_SOCKET) { @@ -65,6 +69,19 @@ char* identify(SOCKADDR_IN* client_addr, u_short local_port, char* buf, size_t m sprintf(buf,"ERROR %d sending request",ERROR_VALUE); break; } + + tv.tv_sec=10; + tv.tv_usec=0; + + FD_ZERO(&socket_set); + FD_SET(sock,&socket_set); + + i=select(sock+1,&socket_set,NULL,NULL,&tv); + if(i<1) { + sprintf(buf,"ERROR %d detecting response",ERROR_VALUE); + break; + } + rd=recv(sock,buf,maxlen,0); if(rd<1) { sprintf(buf,"ERROR %d receiving response",ERROR_VALUE);