asyncio: Synchronize with Tulip

* Issue #159: Fix windows_utils.socketpair()

  - Use "127.0.0.1" (IPv4) or "::1" (IPv6) host instead of "localhost", because
    "localhost" may be a different IP address
  - Reject also invalid arguments: only AF_INET/AF_INET6 with SOCK_STREAM (and
    proto=0) are supported

* Reject add/remove reader/writer when event loop is closed.
* Fix ResourceWarning warnings
This commit is contained in:
Victor Stinner 2014-03-06 00:52:53 +01:00
parent c5cc5011ac
commit eeeebcd816
4 changed files with 73 additions and 6 deletions

View file

@ -136,6 +136,8 @@ def _accept_connection(self, protocol_factory, sock,
def add_reader(self, fd, callback, *args):
"""Add a reader callback."""
if self._selector is None:
raise RuntimeError('Event loop is closed')
handle = events.Handle(callback, args, self)
try:
key = self._selector.get_key(fd)
@ -151,6 +153,8 @@ def add_reader(self, fd, callback, *args):
def remove_reader(self, fd):
"""Remove a reader callback."""
if self._selector is None:
return False
try:
key = self._selector.get_key(fd)
except KeyError:
@ -171,6 +175,8 @@ def remove_reader(self, fd):
def add_writer(self, fd, callback, *args):
"""Add a writer callback.."""
if self._selector is None:
raise RuntimeError('Event loop is closed')
handle = events.Handle(callback, args, self)
try:
key = self._selector.get_key(fd)
@ -186,6 +192,8 @@ def add_writer(self, fd, callback, *args):
def remove_writer(self, fd):
"""Remove a writer callback."""
if self._selector is None:
return False
try:
key = self._selector.get_key(fd)
except KeyError: