summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-02-19 00:45:59 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2014-02-19 00:45:59 (GMT)
commit79a295261a89f67b9d700732e6e7436bfe63e832 (patch)
treec2b9b2fee4dccff15b09b722de67953c683fcd32 /Lib
parent0ee29c2c7fbc7e1b10e153b0cb59d2270347d4f3 (diff)
downloadcpython-79a295261a89f67b9d700732e6e7436bfe63e832.zip
cpython-79a295261a89f67b9d700732e6e7436bfe63e832.tar.gz
cpython-79a295261a89f67b9d700732e6e7436bfe63e832.tar.bz2
asyncio, Tulip issue 143: UNIX domain methods, fix ResourceWarning and
DeprecationWarning warnings. create_unix_server() closes the socket on any error, not only on OSError.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/asyncio/unix_events.py8
-rw-r--r--Lib/test/test_asyncio/test_unix_events.py28
2 files changed, 19 insertions, 17 deletions
diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py
index 3a2fd18..faf4c60 100644
--- a/Lib/asyncio/unix_events.py
+++ b/Lib/asyncio/unix_events.py
@@ -183,13 +183,12 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
raise ValueError(
'path and sock can not be specified at the same time')
+ sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
try:
- sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
sock.setblocking(False)
yield from self.sock_connect(sock, path)
- except OSError:
- if sock is not None:
- sock.close()
+ except:
+ sock.close()
raise
else:
@@ -213,6 +212,7 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
try:
sock.bind(path)
except OSError as exc:
+ sock.close()
if exc.errno == errno.EADDRINUSE:
# Let's improve the error message by adding
# with what exact address it occurs.
diff --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py
index 9866e33..7b5196c 100644
--- a/Lib/test/test_asyncio/test_unix_events.py
+++ b/Lib/test/test_asyncio/test_unix_events.py
@@ -221,17 +221,17 @@ class SelectorEventLoopUnixSocketTests(unittest.TestCase):
with test_utils.unix_socket_path() as path:
sock = socket.socket(socket.AF_UNIX)
sock.bind(path)
-
- coro = self.loop.create_unix_server(lambda: None, path)
- with self.assertRaisesRegexp(OSError,
- 'Address.*is already in use'):
- self.loop.run_until_complete(coro)
+ with sock:
+ coro = self.loop.create_unix_server(lambda: None, path)
+ with self.assertRaisesRegex(OSError,
+ 'Address.*is already in use'):
+ self.loop.run_until_complete(coro)
def test_create_unix_server_existing_path_nonsock(self):
with tempfile.NamedTemporaryFile() as file:
coro = self.loop.create_unix_server(lambda: None, file.name)
- with self.assertRaisesRegexp(OSError,
- 'Address.*is already in use'):
+ with self.assertRaisesRegex(OSError,
+ 'Address.*is already in use'):
self.loop.run_until_complete(coro)
def test_create_unix_server_ssl_bool(self):
@@ -248,11 +248,13 @@ class SelectorEventLoopUnixSocketTests(unittest.TestCase):
self.loop.run_until_complete(coro)
def test_create_unix_server_path_inetsock(self):
- coro = self.loop.create_unix_server(lambda: None, path=None,
- sock=socket.socket())
- with self.assertRaisesRegex(ValueError,
- 'A UNIX Domain Socket was expected'):
- self.loop.run_until_complete(coro)
+ sock = socket.socket()
+ with sock:
+ coro = self.loop.create_unix_server(lambda: None, path=None,
+ sock=sock)
+ with self.assertRaisesRegex(ValueError,
+ 'A UNIX Domain Socket was expected'):
+ self.loop.run_until_complete(coro)
def test_create_unix_connection_path_sock(self):
coro = self.loop.create_unix_connection(
@@ -278,7 +280,7 @@ class SelectorEventLoopUnixSocketTests(unittest.TestCase):
coro = self.loop.create_unix_connection(
lambda: None, '/dev/null', ssl=True)
- with self.assertRaisesRegexp(
+ with self.assertRaisesRegex(
ValueError, 'you have to pass server_hostname when using ssl'):
self.loop.run_until_complete(coro)