from __future__ import generators
import errno
+import os
import select
import socket
import struct
ignore_trailing=ignore_trailing)
return (r, received_time)
-def _connect(s, address):
+def _connect(s, address, expiration):
try:
s.connect(address)
except socket.error:
v_err = v[0]
if v_err not in [errno.EINPROGRESS, errno.EWOULDBLOCK, errno.EALREADY]:
raise v
+ _wait_for_writable(s, expiration)
+ err = s.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
+ if err != 0:
+ raise OSError(err, os.strerror(err)) from None
def tcp(q, where, timeout=None, port=53, af=None, source=None, source_port=0,
begin_time = time.time()
if source is not None:
s.bind(source)
- _connect(s, destination)
+ _connect(s, destination, expiration)
send_tcp(s, wire, expiration)
(r, received_time) = receive_tcp(s, expiration, one_rr_per_rrset,
q.keyring, q.mac, ignore_trailing)
if source is not None:
s.bind(source)
expiration = _compute_expiration(lifetime)
- _connect(s, destination)
+ _connect(s, destination, expiration)
l = len(wire)
if use_udp:
_wait_for_writable(s, expiration)