Fix + test for error of assuming that sets could be added (arithmetic fail).
This commit is contained in:
@@ -428,6 +428,7 @@ class Server(BaseHTTPServer.HTTPServer):
|
||||
def log_message(self, message):
|
||||
self.log.write(message + '\n')
|
||||
|
||||
ACCEPT_SOCK = set((errno.EPIPE, errno.EBADF))
|
||||
|
||||
def server(sock, site,
|
||||
log=None,
|
||||
@@ -477,7 +478,7 @@ def server(sock, site,
|
||||
try:
|
||||
client_socket = sock.accept()
|
||||
except socket.error, e:
|
||||
if getattr(e, 'errno', 0) not in BAD_SOCK + BROKEN_SOCK:
|
||||
if getattr(e, 'errno', 0) not in ACCEPT_SOCK:
|
||||
raise
|
||||
pool.execute_async(serv.process_request, client_socket)
|
||||
except (KeyboardInterrupt, SystemExit):
|
||||
|
@@ -1,12 +1,15 @@
|
||||
import cgi
|
||||
import errno
|
||||
import os
|
||||
import socket
|
||||
import sys
|
||||
from tests import skipped, LimitedTestCase
|
||||
from unittest import main
|
||||
|
||||
from eventlet import api
|
||||
from eventlet import util
|
||||
from eventlet import greenio
|
||||
from eventlet.green import socket as greensocket
|
||||
from eventlet import wsgi
|
||||
from eventlet import processes
|
||||
|
||||
@@ -553,6 +556,31 @@ class TestHttpd(LimitedTestCase):
|
||||
self.assertEquals(fd.read(7), 'testing')
|
||||
fd.close()
|
||||
|
||||
|
||||
def test_025_accept_errors(self):
|
||||
api.kill(self.killer)
|
||||
listener = greensocket.socket()
|
||||
listener.bind(('localhost', 0))
|
||||
# NOT calling listen, to trigger the error
|
||||
self.port = listener.getsockname()[1]
|
||||
self.killer = api.spawn(
|
||||
wsgi.server,
|
||||
listener,
|
||||
self.site,
|
||||
max_size=128,
|
||||
log=self.logfile)
|
||||
old_stderr = sys.stderr
|
||||
try:
|
||||
sys.stderr = self.logfile
|
||||
try:
|
||||
api.connect_tcp(('localhost', self.port))
|
||||
self.fail("Didn't expect to connect")
|
||||
except socket.error, exc:
|
||||
self.assertEquals(exc.errno, errno.ECONNREFUSED)
|
||||
|
||||
self.assert_('Invalid argument' in self.logfile.getvalue(),
|
||||
self.logfile.getvalue())
|
||||
finally:
|
||||
sys.stderr = old_stderr
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
Reference in New Issue
Block a user