diff --git a/mongoose.c b/mongoose.c
index 53258692d8db163685ca14c3e1181a5d7000c75c..f4e1642dd61c9df232337aabb511996dce084543 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -874,7 +874,7 @@ int ns_server_poll(struct ns_server *server, int milli) {
     if (server->ctl[1] != INVALID_SOCKET &&
         FD_ISSET(server->ctl[1], &read_set)) {
       struct ctl_msg ctl_msg;
-      int len = recv(server->ctl[1], &ctl_msg, sizeof(ctl_msg), 0);
+      int len = recv(server->ctl[1], (char *) &ctl_msg, sizeof(ctl_msg), 0);
       send(server->ctl[1], ctl_msg.message, 1, 0);
       if (len >= (int) sizeof(ctl_msg.callback) && ctl_msg.callback != NULL) {
         ns_iterate(server, ctl_msg.callback, ctl_msg.message);
@@ -992,8 +992,9 @@ void ns_server_wakeup_ex(struct ns_server *server, ns_callback_t cb,
       len < sizeof(ctl_msg.message)) {
     ctl_msg.callback = cb;
     memcpy(ctl_msg.message, data, len);
-    send(server->ctl[0], &ctl_msg, offsetof(struct ctl_msg, message) + len, 0);
-    recv(server->ctl[0], &len, 1, 0);
+    send(server->ctl[0], (char *) &ctl_msg,
+         offsetof(struct ctl_msg, message) + len, 0);
+    recv(server->ctl[0], (char *) &len, 1, 0);
   }
 }
 
@@ -4252,6 +4253,10 @@ static void try_parse(struct connection *conn) {
   }
 }
 
+static void proxy_from_client_to_target_host(struct connection *conn) {
+  ns_forward(conn->ns_conn, conn->endpoint.nc);
+}
+
 static void on_recv_data(struct connection *conn) {
   struct iobuf *io = &conn->ns_conn->recv_iobuf;
 
@@ -4275,7 +4280,7 @@ static void on_recv_data(struct connection *conn) {
   }
 
   if (conn->endpoint_type == EP_PROXY && conn->endpoint.nc != NULL) {
-    ns_forward(conn->ns_conn, conn->endpoint.nc);
+    proxy_from_client_to_target_host(conn);
   }
 #ifndef MONGOOSE_NO_CGI
   if (conn->endpoint_type == EP_CGI && conn->endpoint.nc != NULL) {