Fixed the giambio.socket.AsyncSocket.connect() method

This commit is contained in:
nocturn9x 2020-03-25 07:40:01 +00:00
parent 6e49e5112d
commit 14c21b56de
2 changed files with 16 additions and 7 deletions

View File

@ -6,10 +6,10 @@ import socket
from .exceptions import AlreadyJoinedError, CancelledError
from timeit import default_timer
from time import sleep as wait
from .socket import AsyncSocket
from .socket import AsyncSocket, WantRead, WantWrite
from .traps import join, sleep, want_read, want_write, cancel
from .abstractions import Task, Result
from socket import SOL_SOCKET, SO_ERROR
class EventLoop:
@ -157,9 +157,11 @@ class EventLoop:
async def connect_sock(self, sock: socket.socket, addr: tuple):
try:
sock.connect(addr)
except BlockingIOError:
try: # "Borrowed" from curio
result = sock.connect(addr)
return result
except WantWrite:
await want_write(sock)
err = sock.getsockopt(SOL_SOCKET, SO_ERROR)
if err != 0:
raise OSError(err, f'Connect call failed {addr}')

View File

@ -6,6 +6,13 @@ Basic abstraction layer for giambio asynchronous sockets
import socket
try:
from ssl import SSLWantReadError, SSLWantWriteError
WantRead = (BlockingIOError, InterruptedError, SSLWantReadError)
WantWrite = (BlockingIOError, InterruptedError, SSLWantWriteError)
except ImportError:
WantRead = (BlockingIOError, InterruptedError)
WantWrite = (BlockingIOError, InterruptedError)
class AsyncSocket(object):