diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index df6d6d9f26d9835e80c62c4e47e6b8ad01538a77..b662ccd5f6ea1078983b1bce4f529cbc0182bcf8 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -106,6 +106,7 @@ char* genvpath(int lib, int dir, char* str);
 typedef struct {
 	SOCKET			socket;
 	SOCKADDR_IN		client_addr;
+	socklen_t		client_addr_len;
 } ftp_t;
 
 
@@ -2425,7 +2426,7 @@ static void ctrl_thread(void* arg)
 		host=NULL;
 	else
 		host=gethostbyaddr ((char *)&ftp.client_addr.sin_addr
-			,sizeof(ftp.client_addr.sin_addr),AF_INET);
+			,ftp.client_addr_len,AF_INET);
 
 	if(host!=NULL && host->h_name!=NULL)
 		host_name=host->h_name;
@@ -4899,6 +4900,7 @@ void DLLCALL ftp_server(void* arg)
 
 			ftp->socket=client_socket;
 			ftp->client_addr=client_addr;
+			ftp->client_addr_len=client_addr_len;
 
 			_beginthread (ctrl_thread, 0, ftp);
 			served++;
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 089ccc0a5f93eb607a0e0cec2d118413ff2ac6fe..1a0dce74c97c92c078a7c9cbabced1d5609444a9 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -99,6 +99,7 @@ typedef struct {
 typedef struct {
 	SOCKET			socket;
 	SOCKADDR_IN		addr;
+	socklen_t		addr_len;
 	time_t			logintime;
 	user_t			user;
 	client_t*		client;
@@ -1018,7 +1019,7 @@ static void js_service_thread(void* arg)
 		host=NULL;
 	else
 		host=gethostbyaddr((char *)&service_client.addr.sin_addr
-			,sizeof(service_client.addr.sin_addr),AF_INET);
+			,service_client.addr_len,AF_INET);
 
 	if(host!=NULL && host->h_name!=NULL)
 		host_name=host->h_name;
@@ -1338,7 +1339,7 @@ static void native_service_thread(void* arg)
 		host=NULL;
 	else
 		host=gethostbyaddr((char *)&service_client.addr.sin_addr
-			,sizeof(service_client.addr.sin_addr),AF_INET);
+			,service_client.addr_len,AF_INET);
 
 	if(host!=NULL && host->h_name!=NULL)
 		host_name=host->h_name;
@@ -2097,6 +2098,7 @@ void DLLCALL services_thread(void* arg)
 				memset(client,0,sizeof(service_client_t));
 				client->socket=client_socket;
 				client->addr=client_addr;
+				client->addr_len=client_addr_len;
 				client->service=&service[i];
 				client->service->clients++;		/* this should be mutually exclusive */
 				client->udp_buf=udp_buf;
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index 1baf950493900948e656a84626fd58ad595667e2..97f0e69c26f89cd269945704fa47a8f46c93741f 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -228,6 +228,7 @@ typedef struct  {
 typedef struct  {
 	SOCKET			socket;
 	SOCKADDR_IN		addr;
+	socklen_t		addr_len;
 	http_request_t	req;
 	char			host_ip[64];
 	char			host_name[128];	/* Resolved remote host */
@@ -4814,7 +4815,7 @@ void http_session_thread(void* arg)
 		host=NULL;
 	else
 		host=gethostbyaddr ((char *)&session.addr.sin_addr
-			,sizeof(session.addr.sin_addr),AF_INET);
+			,session.addr_len,AF_INET);
 
 	if(host!=NULL && host->h_name!=NULL)
 		host_name=host->h_name;
@@ -5585,6 +5586,7 @@ void DLLCALL web_server(void* arg)
 
 			SAFECOPY(session->host_ip,host_ip);
 			session->addr=client_addr;
+			session->addr_len=client_addr_len;
    			session->socket=client_socket;
 			session->js_branch.auto_terminate=TRUE;
 			session->js_branch.terminated=&terminate_server;