]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Catch and ignore EINVAL errors from setsockopt.
authorBen Darnell <ben@bendarnell.com>
Sun, 5 May 2013 14:18:13 +0000 (10:18 -0400)
committerBen Darnell <ben@bendarnell.com>
Sun, 5 May 2013 14:18:13 +0000 (10:18 -0400)
This seems to happen a lot in benchmark runs when sockets are closed
after a request.

tornado/iostream.py

index 7a5c380da2397949022c7ca3fe457899bb384d03..1dfe06a686d0d7d68d871875bbe38805930be6cd 100644 (file)
@@ -742,8 +742,15 @@ class IOStream(BaseIOStream):
     def set_nodelay(self, value):
         if (self.socket is not None and
             self.socket.family in (socket.AF_INET, socket.AF_INET6)):
-            self.socket.setsockopt(socket.IPPROTO_TCP,
-                                   socket.TCP_NODELAY, 1 if value else 0)
+            try:
+                self.socket.setsockopt(socket.IPPROTO_TCP,
+                                       socket.TCP_NODELAY, 1 if value else 0)
+            except socket.error as e:
+                # Sometimes setsockopt will fail if the socket is closed
+                # at the wrong time.  This can happen with HTTPServer
+                # resetting the value to false between requests.
+                if e.errno != errno.EINVAL:
+                    raise
 
 
 class SSLIOStream(IOStream):