|  | @@ -4973,6 +4973,7 @@ static int connect_socket(struct mg_context *ctx /* may be null */,
 | 
											
												
													
														|  |  	if ((ip_ver == 4) &&
 |  |  	if ((ip_ver == 4) &&
 | 
											
												
													
														|  |  	    (connect(*sock, (struct sockaddr *)&sa->sin, sizeof(sa->sin)) == 0)) {
 |  |  	    (connect(*sock, (struct sockaddr *)&sa->sin, sizeof(sa->sin)) == 0)) {
 | 
											
												
													
														|  |  		/* connected with IPv4 */
 |  |  		/* connected with IPv4 */
 | 
											
												
													
														|  | 
 |  | +		sa->sin.sin_port = port;
 | 
											
												
													
														|  |  		return 1;
 |  |  		return 1;
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -4980,6 +4981,7 @@ static int connect_socket(struct mg_context *ctx /* may be null */,
 | 
											
												
													
														|  |  	if ((ip_ver == 6) &&
 |  |  	if ((ip_ver == 6) &&
 | 
											
												
													
														|  |  	    (connect(*sock, (struct sockaddr *)&sa->sin6, sizeof(sa->sin6)) == 0)) {
 |  |  	    (connect(*sock, (struct sockaddr *)&sa->sin6, sizeof(sa->sin6)) == 0)) {
 | 
											
												
													
														|  |  		/* connected with IPv6 */
 |  |  		/* connected with IPv6 */
 | 
											
												
													
														|  | 
 |  | +		sa->sin6.sin6_port = port;
 | 
											
												
													
														|  |  		return 1;
 |  |  		return 1;
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  #endif
 |  |  #endif
 | 
											
										
											
												
													
														|  | @@ -9507,17 +9509,26 @@ struct mg_connection *mg_connect_client(
 | 
											
												
													
														|  |  		conn = NULL;
 |  |  		conn = NULL;
 | 
											
												
													
														|  |  #endif /* NO_SSL */
 |  |  #endif /* NO_SSL */
 | 
											
												
													
														|  |  	} else {
 |  |  	} else {
 | 
											
												
													
														|  | -		socklen_t len = sizeof(struct sockaddr);
 |  | 
 | 
											
												
													
														|  | 
 |  | +		socklen_t len = (sa.sa.sa_family == AF_INET)
 | 
											
												
													
														|  | 
 |  | +		                    ? sizeof(conn->client.rsa.sin)
 | 
											
												
													
														|  | 
 |  | +		                    : sizeof(conn->client.rsa.sin6);
 | 
											
												
													
														|  | 
 |  | +		struct sockaddr *psa =
 | 
											
												
													
														|  | 
 |  | +		    (sa.sa.sa_family == AF_INET)
 | 
											
												
													
														|  | 
 |  | +		        ? (struct sockaddr *)&(conn->client.rsa.sin)
 | 
											
												
													
														|  | 
 |  | +		        : (struct sockaddr *)&(conn->client.rsa.sin6);
 | 
											
												
													
														|  |  		conn->buf_size = MAX_REQUEST_SIZE;
 |  |  		conn->buf_size = MAX_REQUEST_SIZE;
 | 
											
												
													
														|  |  		conn->buf = (char *)(conn + 1);
 |  |  		conn->buf = (char *)(conn + 1);
 | 
											
												
													
														|  |  		conn->ctx = &fake_ctx;
 |  |  		conn->ctx = &fake_ctx;
 | 
											
												
													
														|  |  		conn->client.sock = sock;
 |  |  		conn->client.sock = sock;
 | 
											
												
													
														|  | -		if (getsockname(sock, &conn->client.rsa.sa, &len) != 0) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +		conn->client.lsa = sa;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		if (getsockname(sock, psa, &len) != 0) {
 | 
											
												
													
														|  |  			mg_cry(conn,
 |  |  			mg_cry(conn,
 | 
											
												
													
														|  |  			       "%s: getsockname() failed: %s",
 |  |  			       "%s: getsockname() failed: %s",
 | 
											
												
													
														|  |  			       __func__,
 |  |  			       __func__,
 | 
											
												
													
														|  |  			       strerror(ERRNO));
 |  |  			       strerror(ERRNO));
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  		conn->client.is_ssl = use_ssl ? 1 : 0;
 |  |  		conn->client.is_ssl = use_ssl ? 1 : 0;
 | 
											
												
													
														|  |  		(void)pthread_mutex_init(&conn->mutex, NULL);
 |  |  		(void)pthread_mutex_init(&conn->mutex, NULL);
 | 
											
												
													
														|  |  #ifndef NO_SSL
 |  |  #ifndef NO_SSL
 |