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):
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):

View File

@@ -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()