Unverified Commit dcce0fa3 authored by Brian May's avatar Brian May Committed by GitHub

Merge pull request #520 from skuhl/master

Fix #494 sshuttle caught in infinite select() loop.
parents 3ee74ddf 7573011a
...@@ -6,6 +6,7 @@ import subprocess as ssubprocess ...@@ -6,6 +6,7 @@ import subprocess as ssubprocess
import os import os
import sys import sys
import platform import platform
import psutil
import sshuttle.helpers as helpers import sshuttle.helpers as helpers
import sshuttle.ssnet as ssnet import sshuttle.ssnet as ssnet
...@@ -541,11 +542,23 @@ def _main(tcp_listener, udp_listener, fw, ssh_cmd, remotename, ...@@ -541,11 +542,23 @@ def _main(tcp_listener, udp_listener, fw, ssh_cmd, remotename,
debug1('seed_hosts: %r\n' % seed_hosts) debug1('seed_hosts: %r\n' % seed_hosts)
mux.send(0, ssnet.CMD_HOST_REQ, str.encode('\n'.join(seed_hosts))) mux.send(0, ssnet.CMD_HOST_REQ, str.encode('\n'.join(seed_hosts)))
while 1: def check_ssh_alive():
rv = serverproc.poll() if daemon:
if rv: # poll() won't tell us when process exited since the
raise Fatal('server died with error code %d' % rv) # process is no longer our child (it returns 0 all the
# time).
if not psutil.pid_exists(serverproc.pid):
raise Fatal('ssh connection to server (pid %d) exited.' %
serverproc.pid)
else:
rv = serverproc.poll()
# poll returns None if process hasn't exited.
if rv is not None:
raise Fatal('ssh connection to server (pid %d) exited'
'with returncode %d' % (serverproc.pid, rv))
while 1:
check_ssh_alive()
ssnet.runonce(handlers, mux) ssnet.runonce(handlers, mux)
if latency_control: if latency_control:
mux.check_fullness() mux.check_fullness()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment