Commit ec2b6140 authored by Joel Martin's avatar Joel Martin

Pull websockify: zombie reap, ignore unready clients.

parent 40f281eb
...@@ -213,7 +213,11 @@ Connection: Upgrade\r ...@@ -213,7 +213,11 @@ Connection: Upgrade\r
stype = "" stype = ""
# Peek, but don't read the data ready = select.select([sock], [], [], 3)[0]
if not ready:
raise self.EClose("ignoring socket not ready")
# Peek, but do not read the data so that we have a opportunity
# to SSL wrap the socket first
handshake = sock.recv(1024, socket.MSG_PEEK) handshake = sock.recv(1024, socket.MSG_PEEK)
#self.msg("Handshake [%s]" % repr(handshake)) #self.msg("Handshake [%s]" % repr(handshake))
...@@ -308,10 +312,18 @@ Connection: Upgrade\r ...@@ -308,10 +312,18 @@ Connection: Upgrade\r
def poll(self): def poll(self):
""" Run periodically while waiting for connections. """ """ Run periodically while waiting for connections. """
self.msg("Running poll()") #self.vmsg("Running poll()")
pass
def top_SIGCHLD(self, sig, stack):
# Reap zombies after calling child SIGCHLD handler
self.do_SIGCHLD(sig, stack)
self.vmsg("Got SIGCHLD, reaping zombies")
os.waitpid(-1, os.WNOHANG)
def do_SIGCHLD(self, sig, stack): def do_SIGCHLD(self, sig, stack):
self.vmsg("Got SIGCHLD, ignoring") pass
def do_SIGINT(self, sig, stack): def do_SIGINT(self, sig, stack):
self.msg("Got SIGINT, exiting") self.msg("Got SIGINT, exiting")
...@@ -340,7 +352,7 @@ Connection: Upgrade\r ...@@ -340,7 +352,7 @@ Connection: Upgrade\r
self.started() # Some things need to happen after daemonizing self.started() # Some things need to happen after daemonizing
# Reep zombies # Reep zombies
signal.signal(signal.SIGCHLD, self.do_SIGCHLD) signal.signal(signal.SIGCHLD, self.top_SIGCHLD)
signal.signal(signal.SIGINT, self.do_SIGINT) signal.signal(signal.SIGINT, self.do_SIGINT)
while True: while True:
......
...@@ -160,7 +160,10 @@ Traffic Legend: ...@@ -160,7 +160,10 @@ Traffic Legend:
try: try:
self.do_proxy(client, tsock) self.do_proxy(client, tsock)
except: except:
if tsock: tsock.close() if tsock:
tsock.close()
self.vmsg("%s:%s: Target closed" %(
self.target_host, self.target_port))
if self.rec: if self.rec:
self.rec.write("'EOF']\n") self.rec.write("'EOF']\n")
self.rec.close() self.rec.close()
......
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