Handle accept() errors more accurate

This commit is contained in:
z3APA3A 2016-01-28 01:07:09 +03:00
parent 43da6cc32b
commit 95efeb8a93

View File

@ -524,6 +524,7 @@ int MODULEMAINFUNC (int argc, char** argv){
}
}
if((conf.paused != srv.version) || (error < 0)) break;
error = 0;
if(!isudp){
size = sizeof(defparam.sincr);
if(iscbc){
@ -551,8 +552,47 @@ int MODULEMAINFUNC (int argc, char** argv){
else {
new_sock = so._accept(sock, (struct sockaddr*)&defparam.sincr, &size);
if(new_sock == INVALID_SOCKET){
#ifdef _WIN32
switch(WSAGetLastError()){
case WSAEMFILE:
case WSAENOBUFS:
case WSAENETDOWN:
usleep(SLEEPTIME * 10);
break;
case WSAEINTR:
error = 1;
break;
default:
break;
}
#else
switch (errno){
#ifdef EMFILE
case EMFILE:
#endif
#ifdef ENFILE
case ENFILE:
#endif
#ifdef ENOBUFS
case ENOBUFS:
#endif
#ifdef ENOMEM
case ENOMEM:
#endif
usleep(SLEEPTIME * 10);
break;
default:
break;
}
#endif
nlog++;
if(error || nlog > 5000) {
sprintf((char *)buf, "accept(): %s", strerror(errno));
if(!srv.silent)(*srv.logfunc)(&defparam, buf);
nlog = 0;
}
continue;
}
}