Skip to content

Commit

Permalink
Setting socket options may fail if remote has already disappeared
Browse files Browse the repository at this point in the history
By the time we come around to accepting a connection on macOS, the
remote may have already disappeared, in which case setting options on
the socket may fail with an error.

Instead of failing and shutting down the server we want to continue, so
move the setting of socket options into the try/except block and log the
error instead.
  • Loading branch information
digitalresistor committed Jan 23, 2023
1 parent 56e44fe commit 5903d58
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/waitress/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,15 +305,19 @@ def handle_accept(self):
if v is None:
return
conn, addr = v
self.set_socket_options(conn)
except OSError:
# Linux: On rare occasions we get a bogus socket back from
# accept. socketmodule.c:makesockaddr complains that the
# address family is unknown. We don't want the whole server
# to shut down because of this.
# macOS: On occasions when the remote has already closed the socket
# before we got around to accepting it, when we try to set the
# socket options it will fail. So instead just we log the error and
# continue
if self.adj.log_socket_errors:
self.logger.warning("server accept() threw an exception", exc_info=True)
return
self.set_socket_options(conn)
addr = self.fix_addr(addr)
self.channel_class(self, conn, addr, self.adj, map=self._map)

Expand Down

0 comments on commit 5903d58

Please # to comment.