mirror of
				https://github.com/3proxy/3proxy.git
				synced 2025-11-04 07:42:39 +08:00 
			
		
		
		
	Fix for external connections
linger was used without init, set bind port to zero
This commit is contained in:
		
							parent
							
								
									6c187d167b
								
							
						
					
					
						commit
						54bcff710c
					
				
							
								
								
									
										13
									
								
								src/common.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/common.c
									
									
									
									
									
								
							@ -630,7 +630,8 @@ int doconnect(struct clientparam * param){
 | 
				
			|||||||
	if(so._getpeername(param->remsock, (struct sockaddr *)¶m->sinsr, &size)==-1) {return (15);}
 | 
						if(so._getpeername(param->remsock, (struct sockaddr *)¶m->sinsr, &size)==-1) {return (15);}
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 else {
 | 
					 else {
 | 
				
			||||||
	struct linger lg;
 | 
						struct linger lg = {1,conf.timeouts[SINGLEBYTE_S]};
 | 
				
			||||||
 | 
						int opt = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(SAISNULL(¶m->sinsr)){
 | 
						if(SAISNULL(¶m->sinsr)){
 | 
				
			||||||
		if(SAISNULL(¶m->req)) {
 | 
							if(SAISNULL(¶m->req)) {
 | 
				
			||||||
@ -642,6 +643,8 @@ int doconnect(struct clientparam * param){
 | 
				
			|||||||
	if(!*SAPORT(¶m->sinsr))*SAPORT(¶m->sinsr) = *SAPORT(¶m->req);
 | 
						if(!*SAPORT(¶m->sinsr))*SAPORT(¶m->sinsr) = *SAPORT(¶m->req);
 | 
				
			||||||
	if ((param->remsock=so._socket(SASOCK(¶m->sinsr), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);}
 | 
						if ((param->remsock=so._socket(SASOCK(¶m->sinsr), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);}
 | 
				
			||||||
	so._setsockopt(param->remsock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg));
 | 
						so._setsockopt(param->remsock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg));
 | 
				
			||||||
 | 
						so._setsockopt(param->remsock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&opt, sizeof(int));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NOIPV6
 | 
					#ifndef NOIPV6
 | 
				
			||||||
	if(*SAFAMILY(¶m->sinsr) == AF_INET6) memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6));
 | 
						if(*SAFAMILY(¶m->sinsr) == AF_INET6) memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6));
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
@ -649,13 +652,7 @@ int doconnect(struct clientparam * param){
 | 
				
			|||||||
		memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa));
 | 
							memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa));
 | 
				
			||||||
	if (param->srv->targetport && !*SAPORT(¶m->sinsl) && ntohs(*SAPORT(¶m->sincr)) > 1023) *SAPORT(¶m->sinsl) = *SAPORT(¶m->sincr);
 | 
						if (param->srv->targetport && !*SAPORT(¶m->sinsl) && ntohs(*SAPORT(¶m->sincr)) > 1023) *SAPORT(¶m->sinsl) = *SAPORT(¶m->sincr);
 | 
				
			||||||
	if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) {
 | 
						if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) {
 | 
				
			||||||
#ifndef NOIPV6
 | 
							*SAPORT(¶m->sinsl) = 0;
 | 
				
			||||||
		if(*SAFAMILY(¶m->sinsr) == AF_INET)	
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
			memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa));
 | 
					 | 
				
			||||||
#ifndef NOIPV6
 | 
					 | 
				
			||||||
		else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6));
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
		if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) {
 | 
							if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) {
 | 
				
			||||||
			return 12;
 | 
								return 12;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user