Fix + test for error of assuming that sets could be added (arithmetic fail).

This commit is contained in:
Ryan Williams
2010-01-11 14:43:30 -08:00
parent 5ad65bf88d
commit ed43d73ab4
2 changed files with 31 additions and 2 deletions

View File

@@ -428,6 +428,7 @@ class Server(BaseHTTPServer.HTTPServer):
def log_message(self, message): def log_message(self, message):
self.log.write(message + '\n') self.log.write(message + '\n')
ACCEPT_SOCK = set((errno.EPIPE, errno.EBADF))
def server(sock, site, def server(sock, site,
log=None, log=None,
@@ -477,7 +478,7 @@ def server(sock, site,
try: try:
client_socket = sock.accept() client_socket = sock.accept()
except socket.error, e: 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 raise
pool.execute_async(serv.process_request, client_socket) pool.execute_async(serv.process_request, client_socket)
except (KeyboardInterrupt, SystemExit): except (KeyboardInterrupt, SystemExit):

View File

@@ -1,12 +1,15 @@
import cgi import cgi
import errno
import os import os
import socket import socket
import sys
from tests import skipped, LimitedTestCase from tests import skipped, LimitedTestCase
from unittest import main from unittest import main
from eventlet import api from eventlet import api
from eventlet import util from eventlet import util
from eventlet import greenio from eventlet import greenio
from eventlet.green import socket as greensocket
from eventlet import wsgi from eventlet import wsgi
from eventlet import processes from eventlet import processes
@@ -553,6 +556,31 @@ class TestHttpd(LimitedTestCase):
self.assertEquals(fd.read(7), 'testing') self.assertEquals(fd.read(7), 'testing')
fd.close() 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__': if __name__ == '__main__':
main() main()