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):
|
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):
|
||||||
|
@@ -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()
|
||||||
|
Reference in New Issue
Block a user