proxy: do handshake in forked process too.
This commit is contained in:
parent
a0315ab1dc
commit
edc4725260
|
@ -504,12 +504,6 @@ void start_server() {
|
||||||
}
|
}
|
||||||
handler_msg("got client connection from %s\n",
|
handler_msg("got client connection from %s\n",
|
||||||
inet_ntoa(cli_addr.sin_addr));
|
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
|
/* base64 is 4 bytes for every 3
|
||||||
* 20 for WS '\x00' / '\xff' and good measure */
|
* 20 for WS '\x00' / '\xff' and good measure */
|
||||||
dbufsize = (bufsize * 3)/4 - 20;
|
dbufsize = (bufsize * 3)/4 - 20;
|
||||||
|
@ -520,6 +514,17 @@ void start_server() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pid == 0) { // handler process
|
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);
|
settings.handler(ws_ctx);
|
||||||
if (pipe_error) {
|
if (pipe_error) {
|
||||||
handler_emsg("Closing due to SIGPIPE\n");
|
handler_emsg("Closing due to SIGPIPE\n");
|
||||||
|
|
|
@ -208,14 +208,19 @@ def start_server():
|
||||||
settings['listen_host'], settings['listen_port'])
|
settings['listen_host'], settings['listen_port'])
|
||||||
startsock, address = lsock.accept()
|
startsock, address = lsock.accept()
|
||||||
handler_msg('got client connection from %s' % address[0])
|
handler_msg('got client connection from %s' % address[0])
|
||||||
csock = do_handshake(startsock)
|
|
||||||
if not csock: continue
|
|
||||||
|
|
||||||
if settings['multiprocess']:
|
if settings['multiprocess']:
|
||||||
handler_msg("forking handler process")
|
handler_msg("forking handler process")
|
||||||
pid = os.fork()
|
pid = os.fork()
|
||||||
|
|
||||||
if pid == 0: # handler process
|
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)
|
settings['handler'](csock)
|
||||||
else: # parent process
|
else: # parent process
|
||||||
settings['handler_id'] += 1
|
settings['handler_id'] += 1
|
||||||
|
|
Loading…
Reference in New Issue