Skip to content

Commit 77ff15d

Browse files
committed
PTYSocketProxy: protect against ConnectionResetError
1 parent 7cb5c06 commit 77ff15d

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

unpythonic/net/ptyproxy.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -77,20 +77,24 @@ def forward_traffic():
7777
mypoll.register(self.sock, select.POLLIN)
7878
mypoll.register(self.master, select.POLLIN)
7979
while not self._terminated:
80-
fdlist = mypoll.poll(1000)
81-
for fd, event in fdlist:
82-
if fd == self.master:
83-
request = os.read(fd, 4096)
84-
if len(request) == 0: # disconnect by PTY slave
85-
self.on_slave_disconnect(self)
86-
return
87-
self.sock.send(request)
88-
else:
89-
request = self.sock.recv(4096)
90-
if len(request) == 0: # disconnect by client behind socket
91-
self.on_socket_disconnect(self)
92-
return
93-
os.write(self.master, request)
80+
try:
81+
fdlist = mypoll.poll(1000)
82+
for fd, event in fdlist:
83+
if fd == self.master:
84+
request = os.read(fd, 4096)
85+
if len(request) == 0: # disconnect by PTY slave
86+
self.on_slave_disconnect(self)
87+
return
88+
self.sock.send(request)
89+
else:
90+
request = self.sock.recv(4096)
91+
if len(request) == 0: # disconnect by client behind socket
92+
self.on_socket_disconnect(self)
93+
return
94+
os.write(self.master, request)
95+
except ConnectionResetError:
96+
self.on_socket_disconnect(self)
97+
return
9498

9599
self._terminated = False
96100
self._thread = threading.Thread(target=forward_traffic, name="PTY on {}".format(os.ttyname(self.slave)), daemon=True)

0 commit comments

Comments
 (0)