diff --git a/utils/websocket.c b/utils/websocket.c
index 1bcc21b91aebc704465f0a66e7ef5f22be9720ff..d5ad5aa4035b91715df09b0d1b34729c241ab45c 100644
--- a/utils/websocket.c
+++ b/utils/websocket.c
@@ -504,12 +504,6 @@ void start_server() {
         }
         handler_msg("got client connection from %s\n",
                     inet_ntoa(cli_addr.sin_addr));
-        ws_ctx = do_handshake(csock);
-        if (ws_ctx == NULL) {
-            close(csock);
-            continue;
-        }
-
         /* base64 is 4 bytes for every 3
          *    20 for WS '\x00' / '\xff' and good measure  */
         dbufsize = (bufsize * 3)/4 - 20;
@@ -520,6 +514,17 @@ void start_server() {
         }
 
         if (pid == 0) {  // handler process
+            ws_ctx = do_handshake(csock);
+            if (ws_ctx == NULL) {
+                close(csock);
+                if (settings.multiprocess) {
+                    handler_msg("No connection after handshake");
+                    break;   // Child process exits
+                } else {
+                    continue;
+                }
+            }
+
             settings.handler(ws_ctx);
             if (pipe_error) {
                 handler_emsg("Closing due to SIGPIPE\n");
diff --git a/utils/websocket.py b/utils/websocket.py
index abc463f193fe436d9e630740d6313376f902db3c..4011d74f1cbc587cb8953f4862ce03a41acbc7d2 100755
--- a/utils/websocket.py
+++ b/utils/websocket.py
@@ -208,14 +208,19 @@ def start_server():
                         settings['listen_host'], settings['listen_port'])
             startsock, address = lsock.accept()
             handler_msg('got client connection from %s' % address[0])
-            csock = do_handshake(startsock)
-            if not csock: continue
 
             if settings['multiprocess']:
                 handler_msg("forking handler process")
                 pid = os.fork()
 
             if pid == 0:  # handler process
+                csock = do_handshake(startsock)
+                if not csock:
+                    if settings['multiprocess']:
+                        handler_msg("No connection after handshake");
+                        break
+                    else:
+                        continue
                 settings['handler'](csock)
             else:         # parent process
                 settings['handler_id'] += 1