From 20fa72bd42a16564ad6ed3fa5172b8d8804d90b7 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Sat, 5 May 2018 19:59:37 +0300 Subject: [PATCH] Add connback timeouts / improve logging --- src/proxymain.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/proxymain.c b/src/proxymain.c index 4b740d5..82075c1 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -19,9 +19,19 @@ void * threadfunc (void *p) { int i = -1; if(param->srv->cbsock != INVALID_SOCKET){ SASIZETYPE size = sizeof(param->sinsr); + struct pollfd fds; + fds.fd = param->srv->cbsock; + fds.events = POLLIN; + fds.revents = 0; for(i=5+(param->srv->maxchild>>10); i; i--){ + if(poll(&fds, 1, 1000*CONNBACK_TO)!=1){ + param->srv->logfunc(param, (unsigned char *)"Connect back not received, check connback client"); + i = 0; + break; + } param->remsock = so._accept(param->srv->cbsock, (struct sockaddr*)¶m->sinsr, &size); if(param->remsock == INVALID_SOCKET) { + param->srv->logfunc(param, (unsigned char *)"Connect back accept() failed"); continue; } #ifndef WITHMAIN @@ -34,7 +44,7 @@ void * threadfunc (void *p) { continue; } #endif - if(so._sendto(param->remsock, "C", 1, 0, (struct sockaddr*)¶m->sinsr, size) != 1){ + if(socksendto(param->remsock, (struct sockaddr*)¶m->sinsr, "C", 1, CONNBACK_TO) != 1){ param->srv->logfunc(param, (unsigned char *)"Connect back sending command failed"); so._closesocket(param->remsock); param->remsock = INVALID_SOCKET; @@ -46,7 +56,6 @@ void * threadfunc (void *p) { } if(!i){ param->res = 13; - param->srv->logfunc(param, (unsigned char *)"Connect back accept() repeatedly failed"); freeparam(param); } else { @@ -676,7 +685,7 @@ int MODULEMAINFUNC (int argc, char** argv){ usleep(SLEEPTIME); continue; } - if(so._recvfrom(new_sock,(char *)buf,1,0,(struct sockaddr*)&defparam.sincr, &size) != 1) { + if(sockrecvfrom(new_sock,(struct sockaddr*)&defparam.sincr,(char *)buf,1,60) != 1 || *buf!='C') { so._closesocket(new_sock); new_sock = INVALID_SOCKET; usleep(SLEEPTIME);