def setup(self): # overriding SocketServer.setup to correctly handle SSL.Connection objects conn = self.connection = self.request # TCP_QUICKACK is a better alternative to disabling Nagle's algorithm # https://news.ycombinator.com/item?id=10607422 if getattr(socket, 'TCP_QUICKACK', None): try: conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_QUICKACK, True) except socket.error: pass try: self.rfile = conn.makefile('rb', self.rbufsize) self.wfile = conn.makefile('wb', self.wbufsize) except (AttributeError, NotImplementedError): if hasattr(conn, 'send') and hasattr(conn, 'recv'): # it's an SSL.Connection self.rfile = socket._fileobject(conn, "rb", self.rbufsize) self.wfile = socket._fileobject(conn, "wb", self.wbufsize) else: # it's a SSLObject, or a martian raise NotImplementedError( '''eventlet.wsgi doesn't support sockets of type {0}'''. format(type(conn)))
def setup(self): # if we bind to a UNIX socket, then we have no client_address. # since a lot of code expects one, we fake it. if not self.client_address: self.client_address = ('127.0.0.1', 0) # overriding SocketServer.setup to correctly handle SSL.Connection objects conn = self.connection = self.request # TCP_QUICKACK is a better alternative to disabling Nagle's algorithm # https://news.ycombinator.com/item?id=10607422 if getattr(socket, 'TCP_QUICKACK', None): try: conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_QUICKACK, True) except socket.error: pass try: self.rfile = conn.makefile('rb', self.rbufsize) self.wfile = conn.makefile('wb', self.wbufsize) except (AttributeError, NotImplementedError): if hasattr(conn, 'send') and hasattr(conn, 'recv'): # it's an SSL.Connection self.rfile = socket._fileobject(conn, "rb", self.rbufsize) self.wfile = socket._fileobject(conn, "wb", self.wbufsize) else: # it's a SSLObject, or a martian raise NotImplementedError("wsgi.py doesn't support sockets " "of type %s" % type(conn))
def setup(self): # overriding SocketServer.setup to correctly handle SSL.Connection objects conn = self.connection = self.request try: self.rfile = conn.makefile('rb', self.rbufsize) self.wfile = conn.makefile('wb', self.wbufsize) except (AttributeError, NotImplementedError): if hasattr(conn, 'send') and hasattr(conn, 'recv'): # it's an SSL.Connection self.rfile = socket._fileobject(conn, "rb", self.rbufsize) self.wfile = socket._fileobject(conn, "wb", self.wbufsize) else: # it's a SSLObject, or a martian raise NotImplementedError("wsgi.py doesn't support sockets " "of type %s" % type(conn))
def testClose(self): class MockSocket: closed = False def flush(self): pass def close(self): self.closed = True # must not close unless we request it: the original use of _fileobject # by module socket requires that the underlying socket not be closed until # the _socketobject that created the _fileobject is closed s = MockSocket() f = socket._fileobject(s) f.close() self.assert_(not s.closed) s = MockSocket() f = socket._fileobject(s, close=True) f.close() self.assert_(s.closed)
def setup(self): # overriding SocketServer.setup to correctly handle SSL.Connection objects conn = self.connection = self.request # TCP_QUICKACK is a better alternative to disabling Nagle's algorithm # https://news.ycombinator.com/item?id=10607422 if getattr(socket, 'TCP_QUICKACK', None): try: conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_QUICKACK, True) except socket.error: pass try: self.rfile = conn.makefile('rb', self.rbufsize) self.wfile = conn.makefile('wb', self.wbufsize) except (AttributeError, NotImplementedError): if hasattr(conn, 'send') and hasattr(conn, 'recv'): # it's an SSL.Connection self.rfile = socket._fileobject(conn, "rb", self.rbufsize) self.wfile = socket._fileobject(conn, "wb", self.wbufsize) else: # it's a SSLObject, or a martian raise NotImplementedError( '''eventlet.wsgi doesn't support sockets of type {0}'''.format(type(conn)))