From f1b94d7e1c6c842da44ccdab663c96a10c607451 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Mon, 23 Nov 2020 18:58:33 +0300 Subject: [PATCH] Fix for connect back --- src/proxymain.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/proxymain.c b/src/proxymain.c index c3b9e36..1a0889f 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -35,6 +35,14 @@ void * threadfunc (void *p) { dolog(param, (char *)"Connect back accept() failed"); continue; } + { +#ifdef _WIN32 + unsigned long ul=1; + ioctlsocket(param->remsock, FIONBIO, &ul); +#else + fcntl(param->remsock,F_SETFL,O_NONBLOCK | fcntl(param->remsock,F_GETFL)); +#endif + } #ifndef WITHMAIN param->req = param->sinsr; if(param->srv->preacl) param->res = checkpreACL(param); @@ -45,7 +53,7 @@ void * threadfunc (void *p) { continue; } #endif - if(socksendto(param->remsock, (struct sockaddr*)¶m->sinsr, (char *)"C", 1, CONNBACK_TO) != 1){ + if(socksendto(param->remsock, (struct sockaddr*)¶m->sinsr, "C", 1, CONNBACK_TO*1000) != 1){ dolog(param, (char *)"Connect back sending command failed"); so._closesocket(param->remsock); param->remsock = INVALID_SOCKET; @@ -688,7 +696,8 @@ int MODULEMAINFUNC (int argc, char** argv){ usleep(SLEEPTIME); continue; } - if(sockrecvfrom(new_sock,(struct sockaddr*)&defparam.sincr,buf,1,60) != 1 || *buf!='C') { + + if(sockrecvfrom(new_sock,(struct sockaddr*)&defparam.sincr,buf,1,60*1000) != 1 || *buf!='C') { so._closesocket(new_sock); new_sock = INVALID_SOCKET; usleep(SLEEPTIME); @@ -746,8 +755,8 @@ int MODULEMAINFUNC (int argc, char** argv){ } continue; } + setopts(new_sock, srv->clisockopts); } - setopts(new_sock, srv->clisockopts); size = sizeof(defparam.sincl); if(so._getsockname(new_sock, (struct sockaddr *)&defparam.sincl, &size)){ sprintf((char *)buf, "getsockname(): %s", strerror(errno));