Update proxymain.c

This commit is contained in:
Vladimir Dubrovin 2026-04-27 20:12:28 +03:00
parent e088a5d7f9
commit 319a74de06

View File

@ -210,6 +210,16 @@ void setopts(SOCKET s, int opts){
} }
} }
static void freesrvstrings(struct srvparam *srv, unsigned char *cbc_string, unsigned char *cbl_string) {
if(cbc_string) myfree(cbc_string);
if(cbl_string) myfree(cbl_string);
if(srv->logtarget) myfree(srv->logtarget);
if(srv->logformat) myfree(srv->logformat);
#if defined SO_BINDTODEVICE || defined IP_BOUND_IF
if(srv->ibindtodevice) myfree(srv->ibindtodevice);
if(srv->obindtodevice) myfree(srv->obindtodevice);
#endif
}
#ifndef MODULEMAINFUNC #ifndef MODULEMAINFUNC
#define MODULEMAINFUNC main #define MODULEMAINFUNC main
@ -730,12 +740,7 @@ int MODULEMAINFUNC (int argc, char** argv){
sleeptime = (sleeptime<<1); sleeptime = (sleeptime<<1);
if(!sleeptime) { if(!sleeptime) {
srv.so._closesocket(srv.so.state, sock); srv.so._closesocket(srv.so.state, sock);
if(cbc_string) myfree(cbc_string); freesrvstrings(&srv, cbc_string, cbl_string);
if(cbl_string) myfree(cbl_string);
if(srv.ibindtodevice) myfree(srv.ibindtodevice);
if(srv.obindtodevice) myfree(srv.obindtodevice);
if(srv.logtarget) myfree(srv.logtarget);
if(srv.logformat) myfree(srv.logformat);
return -3; return -3;
} }
} }
@ -744,12 +749,7 @@ int MODULEMAINFUNC (int argc, char** argv){
sprintf((char *)buf, "listen(): %s", strerror(errno)); sprintf((char *)buf, "listen(): %s", strerror(errno));
if(!srv.silent)dolog(&defparam, buf); if(!srv.silent)dolog(&defparam, buf);
srv.so._closesocket(srv.so.state, sock); srv.so._closesocket(srv.so.state, sock);
if(cbc_string) myfree(cbc_string); freesrvstrings(&srv, cbc_string, cbl_string);
if(cbl_string) myfree(cbl_string);
if(srv.ibindtodevice) myfree(srv.ibindtodevice);
if(srv.obindtodevice) myfree(srv.obindtodevice);
if(srv.logtarget) myfree(srv.logtarget);
if(srv.logformat) myfree(srv.logformat);
return -4; return -4;
} }
} }
@ -765,12 +765,7 @@ int MODULEMAINFUNC (int argc, char** argv){
parsehost(srv.family, cbl_string, (struct sockaddr *)&cbsa); parsehost(srv.family, cbl_string, (struct sockaddr *)&cbsa);
if((srv.cbsock=srv.so._socket(srv.so.state, SASOCK(&cbsa), SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET) { if((srv.cbsock=srv.so._socket(srv.so.state, SASOCK(&cbsa), SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET) {
dolog(&defparam, (unsigned char *)"Failed to allocate connect back socket"); dolog(&defparam, (unsigned char *)"Failed to allocate connect back socket");
if(cbc_string) myfree(cbc_string); freesrvstrings(&srv, cbc_string, cbl_string);
if(cbl_string) myfree(cbl_string);
if(srv.ibindtodevice) myfree(srv.ibindtodevice);
if(srv.obindtodevice) myfree(srv.obindtodevice);
if(srv.logtarget) myfree(srv.logtarget);
if(srv.logformat) myfree(srv.logformat);
return -6; return -6;
} }
opt = 1; opt = 1;
@ -785,23 +780,13 @@ int MODULEMAINFUNC (int argc, char** argv){
if(srv.so._bind(srv.so.state, srv.cbsock, (struct sockaddr*)&cbsa, SASIZE(&cbsa))==-1) { if(srv.so._bind(srv.so.state, srv.cbsock, (struct sockaddr*)&cbsa, SASIZE(&cbsa))==-1) {
dolog(&defparam, (unsigned char *)"Failed to bind connect back socket"); dolog(&defparam, (unsigned char *)"Failed to bind connect back socket");
srv.so._closesocket(srv.so.state, srv.cbsock); srv.so._closesocket(srv.so.state, srv.cbsock);
if(cbc_string) myfree(cbc_string); freesrvstrings(&srv, cbc_string, cbl_string);
if(cbl_string) myfree(cbl_string);
if(srv.ibindtodevice) myfree(srv.ibindtodevice);
if(srv.obindtodevice) myfree(srv.obindtodevice);
if(srv.logtarget) myfree(srv.logtarget);
if(srv.logformat) myfree(srv.logformat);
return -7; return -7;
} }
if(srv.so._listen(srv.so.state, srv.cbsock, 1 + (srv.maxchild>>4))==-1) { if(srv.so._listen(srv.so.state, srv.cbsock, 1 + (srv.maxchild>>4))==-1) {
dolog(&defparam, (unsigned char *)"Failed to listen connect back socket"); dolog(&defparam, (unsigned char *)"Failed to listen connect back socket");
srv.so._closesocket(srv.so.state, srv.cbsock); srv.so._closesocket(srv.so.state, srv.cbsock);
if(cbc_string) myfree(cbc_string); freesrvstrings(&srv, cbc_string, cbl_string);
if(cbl_string) myfree(cbl_string);
if(srv.ibindtodevice) myfree(srv.ibindtodevice);
if(srv.obindtodevice) myfree(srv.obindtodevice);
if(srv.logtarget) myfree(srv.logtarget);
if(srv.logformat) myfree(srv.logformat);
return -8; return -8;
} }
} }