# HG changeset patch
# User Olaf Wintermann <olaf.wintermann@gmail.com>
# Date 1515922689 -3600
# Node ID 6345f50208d546366d3e6dd6cc1ae48203182d2e
# Parent  aa8393527b1edf16d6373c696365c20e5432b1dc
fixes keep-alive with ssl

diff -r aa8393527b1e -r 6345f50208d5 src/server/daemon/httplistener.c
--- a/src/server/daemon/httplistener.c	Sat Jan 13 19:01:00 2018 +0100
+++ b/src/server/daemon/httplistener.c	Sun Jan 14 10:38:09 2018 +0100
@@ -402,6 +402,7 @@
         conn->address = ca;
         conn->fd = clientfd;
         conn->listener = ls;
+        conn->ssl_accepted = 0;
         if(ls->ssl) {
             // SSL connections are always non-blocking 
             // set socket non blocking
diff -r aa8393527b1e -r 6345f50208d5 src/server/daemon/sessionhandler.c
--- a/src/server/daemon/sessionhandler.c	Sat Jan 13 19:01:00 2018 +0100
+++ b/src/server/daemon/sessionhandler.c	Sun Jan 14 10:38:09 2018 +0100
@@ -260,7 +260,7 @@
     
     Event *event = malloc(sizeof(Event));
     ZERO(event, sizeof(Event));
-    event->fn = conn->ssl ? evt_request_ssl_accept : evt_request_input;
+    event->fn = conn->ssl && !conn->ssl_accepted ? evt_request_ssl_accept : evt_request_input;
     event->finish = evt_request_finish;
     event->cookie = io;
     
@@ -305,6 +305,7 @@
             return 0;
         }
     }
+    conn->ssl_accepted = WS_TRUE;
     
     // SSL_accept successful, start request input now
     event->fn = evt_request_input;
diff -r aa8393527b1e -r 6345f50208d5 src/server/daemon/sessionhandler.h
--- a/src/server/daemon/sessionhandler.h	Sat Jan 13 19:01:00 2018 +0100
+++ b/src/server/daemon/sessionhandler.h	Sun Jan 14 10:38:09 2018 +0100
@@ -51,6 +51,7 @@
     HttpListener         *listener;
     SessionHandler       *session_handler;
     SSL                  *ssl;
+    WSBool               ssl_accepted;
     int                  ssl_error;
     int (*read)(Connection *conn, void *buf, int len);
     int (*write)(Connection *conn, const void *buf, int len);