blob: 81864f511357333865bd204ee692fdff924c761a [file] [log] [blame]
Fred Drakea6070f02000-08-16 14:14:32 +00001# Wrapper module for _socket, providing some additional facilities
2# implemented in Python.
3
4"""\
5This module provides socket operations and some related functions.
6On Unix, it supports IP (Internet Protocol) and Unix domain sockets.
Tim Peters495ad3c2001-01-15 01:36:40 +00007On other systems, it only supports IP. Functions specific for a
Martin v. Löwisaf484d52000-09-30 11:34:30 +00008socket are available as methods of the socket object.
Fred Drakea6070f02000-08-16 14:14:32 +00009
10Functions:
11
12socket() -- create a new socket object
Dave Cole331708b2004-08-09 04:51:41 +000013socketpair() -- create a pair of new socket objects [*]
Fred Drakea6070f02000-08-16 14:14:32 +000014fromfd() -- create a socket object from an open file descriptor [*]
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +000015fromshare() -- create a socket object from data received from socket.share() [*]
Fred Drakea6070f02000-08-16 14:14:32 +000016gethostname() -- return the current hostname
17gethostbyname() -- map a hostname to its IP number
18gethostbyaddr() -- map an IP number or hostname to DNS info
19getservbyname() -- map a service name and a protocol name to a port number
Mark Dickinson5c91bf32009-06-02 07:41:26 +000020getprotobyname() -- map a protocol name (e.g. 'tcp') to a number
Fred Drakea6070f02000-08-16 14:14:32 +000021ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order
22htons(), htonl() -- convert 16, 32 bit int from host to network byte order
23inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format
24inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +000025socket.getdefaulttimeout() -- get the default timeout value
26socket.setdefaulttimeout() -- set the default timeout value
Gregory P. Smithb4066372010-01-03 03:28:29 +000027create_connection() -- connects to an address, with an optional timeout and
28 optional source address.
Fred Drakea6070f02000-08-16 14:14:32 +000029
30 [*] not available on all platforms!
31
32Special objects:
33
34SocketType -- type object for socket objects
35error -- exception raised for I/O errors
Guido van Rossum47dfa4a2003-04-25 05:48:32 +000036has_ipv6 -- boolean value indicating if IPv6 is supported
Fred Drakea6070f02000-08-16 14:14:32 +000037
38Integer constants:
39
40AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
41SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
42
43Many other constants may be defined; these may be used in calls to
44the setsockopt() and getsockopt() methods.
45"""
46
Tim Peters18e67782002-02-17 04:25:24 +000047import _socket
Fred Drakea6070f02000-08-16 14:14:32 +000048from _socket import *
Tim Peters18e67782002-02-17 04:25:24 +000049
Guido van Rossum7d0a8262007-05-21 23:13:11 +000050import os, sys, io
Fred Drakea6070f02000-08-16 14:14:32 +000051
Fred Drake70d566b2003-04-29 19:50:25 +000052try:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000053 import errno
Brett Cannoncd171c82013-07-04 17:43:24 -040054except ImportError:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000055 errno = None
56EBADF = getattr(errno, 'EBADF', 9)
Antoine Pitrou98b46702010-09-18 22:59:00 +000057EAGAIN = getattr(errno, 'EAGAIN', 11)
58EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11)
Fred Drake70d566b2003-04-29 19:50:25 +000059
Benjamin Petersonef3e4c22009-04-11 19:48:14 +000060__all__ = ["getfqdn", "create_connection"]
Skip Montanaro0de65802001-02-15 22:15:14 +000061__all__.extend(os._get_exports_list(_socket))
Thomas Wouters47b49bf2007-08-30 22:15:33 +000062
63
64_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +000065
Fred Drakea6070f02000-08-16 14:14:32 +000066# WSA error codes
67if sys.platform.lower().startswith("win"):
68 errorTab = {}
69 errorTab[10004] = "The operation was interrupted."
70 errorTab[10009] = "A bad file handle was passed."
71 errorTab[10013] = "Permission denied."
72 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
73 errorTab[10022] = "An invalid operation was attempted."
74 errorTab[10035] = "The socket operation would block"
75 errorTab[10036] = "A blocking operation is already in progress."
76 errorTab[10048] = "The network address is in use."
77 errorTab[10054] = "The connection has been reset."
78 errorTab[10058] = "The network has been shut down."
79 errorTab[10060] = "The operation timed out."
80 errorTab[10061] = "Connection refused."
81 errorTab[10063] = "The name is too long."
82 errorTab[10064] = "The host is down."
83 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +000084 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +000085
Fred Drakea6070f02000-08-16 14:14:32 +000086
Guido van Rossum7d0a8262007-05-21 23:13:11 +000087class socket(_socket.socket):
88
89 """A subclass of _socket.socket adding the makefile() method."""
90
Guido van Rossum86bc33c2007-11-14 22:32:02 +000091 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +000092
Jeremy Hylton5accbdb2007-08-03 20:40:09 +000093 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +000094 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +000095 self._io_refs = 0
96 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +000097
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +000098 def __enter__(self):
99 return self
100
101 def __exit__(self, *args):
102 if not self._closed:
103 self.close()
104
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000105 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200106 """Wrap __repr__() to reveal the real class name and socket
107 address(es).
108 """
109 closed = getattr(self, '_closed', False)
110 s = "<%s.%s%s fd=%i, family=%i, type=%i, proto=%i" \
111 % (self.__class__.__module__,
112 self.__class__.__name__,
113 " [closed]" if closed else "",
114 self.fileno(),
115 self.family,
116 self.type,
117 self.proto)
118 if not closed:
119 try:
120 laddr = self.getsockname()
121 if laddr:
122 s += ", laddr=%s" % str(laddr)
123 except error:
124 pass
125 try:
126 raddr = self.getpeername()
127 if raddr:
128 s += ", raddr=%s" % str(raddr)
129 except error:
130 pass
131 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000132 return s
133
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100134 def __getstate__(self):
135 raise TypeError("Cannot serialize socket object")
136
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000137 def dup(self):
138 """dup() -> socket object
139
Victor Stinnerdaf45552013-08-28 00:53:59 +0200140 Duplicate the socket. Return a new socket object connected to the same
141 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000142 """
143 fd = dup(self.fileno())
144 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
145 sock.settimeout(self.gettimeout())
146 return sock
147
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000148 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000149 """accept() -> (socket object, address info)
150
151 Wait for an incoming connection. Return a new socket
152 representing the connection, and the address of the client.
153 For IP sockets, the address info is a pair (hostaddr, port).
154 """
155 fd, addr = self._accept()
Antoine Pitrou600232b2011-01-05 21:03:42 +0000156 sock = socket(self.family, self.type, self.proto, fileno=fd)
157 # Issue #7995: if no default timeout is set and the listening
158 # socket had a (non-zero) timeout, force the new socket in blocking
159 # mode to override platform-specific socket flags inheritance.
160 if getdefaulttimeout() is None and self.gettimeout():
161 sock.setblocking(True)
162 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000163
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000164 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000165 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000166 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000167
168 The arguments are as for io.open() after the filename,
169 except the only mode characters supported are 'r', 'w' and 'b'.
170 The semantics are similar too. (XXX refactor to share code?)
171 """
172 for c in mode:
173 if c not in {"r", "w", "b"}:
174 raise ValueError("invalid mode %r (only r, w, b allowed)")
175 writing = "w" in mode
176 reading = "r" in mode or not writing
177 assert reading or writing
178 binary = "b" in mode
179 rawmode = ""
180 if reading:
181 rawmode += "r"
182 if writing:
183 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000184 raw = SocketIO(self, rawmode)
185 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000186 if buffering is None:
187 buffering = -1
188 if buffering < 0:
189 buffering = io.DEFAULT_BUFFER_SIZE
190 if buffering == 0:
191 if not binary:
192 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000193 return raw
194 if reading and writing:
195 buffer = io.BufferedRWPair(raw, raw, buffering)
196 elif reading:
197 buffer = io.BufferedReader(raw, buffering)
198 else:
199 assert writing
200 buffer = io.BufferedWriter(raw, buffering)
201 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000202 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000203 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000204 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000205 return text
206
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000207 def _decref_socketios(self):
208 if self._io_refs > 0:
209 self._io_refs -= 1
210 if self._closed:
211 self.close()
212
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000213 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000214 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000215 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000216
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000217 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000218 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000219 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000220 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000221 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000222
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200223 def detach(self):
224 """detach() -> file descriptor
225
226 Close the socket object without closing the underlying file descriptor.
227 The object cannot be used after this call, but the file descriptor
228 can be reused for other purposes. The file descriptor is returned.
229 """
230 self._closed = True
231 return super().detach()
232
Victor Stinnerdaf45552013-08-28 00:53:59 +0200233 if os.name == 'nt':
234 def get_inheritable(self):
235 return os.get_handle_inheritable(self.fileno())
236 def set_inheritable(self, inheritable):
237 os.set_handle_inheritable(self.fileno(), inheritable)
238 else:
239 def get_inheritable(self):
240 return os.get_inheritable(self.fileno())
241 def set_inheritable(self, inheritable):
242 os.set_inheritable(self.fileno(), inheritable)
243 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
244 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
245
246
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000247def fromfd(fd, family, type, proto=0):
248 """ fromfd(fd, family, type[, proto]) -> socket object
249
250 Create a socket object from a duplicate of the given file
251 descriptor. The remaining arguments are the same as for socket().
252 """
253 nfd = dup(fd)
254 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000255
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000256if hasattr(_socket.socket, "share"):
257 def fromshare(info):
258 """ fromshare(info) -> socket object
259
260 Create a socket object from a the bytes object returned by
261 socket.share(pid).
262 """
263 return socket(0, 0, 0, info)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000264
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000265if hasattr(_socket, "socketpair"):
266
267 def socketpair(family=None, type=SOCK_STREAM, proto=0):
268 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
269
270 Create a pair of socket objects from the sockets returned by the platform
271 socketpair() function.
272 The arguments are the same as for socket() except the default family is
273 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
274 """
275 if family is None:
276 try:
277 family = AF_UNIX
278 except NameError:
279 family = AF_INET
280 a, b = _socket.socketpair(family, type, proto)
281 a = socket(family, type, proto, a.detach())
282 b = socket(family, type, proto, b.detach())
283 return a, b
284
285
Antoine Pitrou98b46702010-09-18 22:59:00 +0000286_blocking_errnos = { EAGAIN, EWOULDBLOCK }
287
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000288class SocketIO(io.RawIOBase):
289
290 """Raw I/O implementation for stream sockets.
291
292 This class supports the makefile() method on sockets. It provides
293 the raw I/O interface on top of a socket object.
294 """
295
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000296 # One might wonder why not let FileIO do the job instead. There are two
297 # main reasons why FileIO is not adapted:
298 # - it wouldn't work under Windows (where you can't used read() and
299 # write() on a socket handle)
300 # - it wouldn't work with socket timeouts (FileIO would ignore the
301 # timeout and consider the socket non-blocking)
302
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000303 # XXX More docs
304
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000305 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000306 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000307 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000308 io.RawIOBase.__init__(self)
309 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000310 if "b" not in mode:
311 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000312 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000313 self._reading = "r" in mode
314 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000315 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000316
317 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000318 """Read up to len(b) bytes into the writable buffer *b* and return
319 the number of bytes read. If the socket is non-blocking and no bytes
320 are available, None is returned.
321
322 If *b* is non-empty, a 0 return value indicates that the connection
323 was shutdown at the other end.
324 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000325 self._checkClosed()
326 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000327 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200328 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000329 while True:
330 try:
331 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000332 except timeout:
333 self._timeout_occurred = True
334 raise
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200335 except InterruptedError:
336 continue
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000337 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200338 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000339 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000340 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000341
342 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000343 """Write the given bytes or bytearray object *b* to the socket
344 and return the number of bytes written. This can be less than
345 len(b) if not all data could be written. If the socket is
346 non-blocking and no bytes could be written None is returned.
347 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000348 self._checkClosed()
349 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000350 try:
351 return self._sock.send(b)
352 except error as e:
353 # XXX what about EINTR?
354 if e.args[0] in _blocking_errnos:
355 return None
356 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000357
358 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000359 """True if the SocketIO is open for reading.
360 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200361 if self.closed:
362 raise ValueError("I/O operation on closed socket.")
363 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000364
365 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000366 """True if the SocketIO is open for writing.
367 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200368 if self.closed:
369 raise ValueError("I/O operation on closed socket.")
370 return self._writing
371
372 def seekable(self):
373 """True if the SocketIO is open for seeking.
374 """
375 if self.closed:
376 raise ValueError("I/O operation on closed socket.")
377 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000378
379 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000380 """Return the file descriptor of the underlying socket.
381 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000382 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000383 return self._sock.fileno()
384
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000385 @property
386 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000387 if not self.closed:
388 return self.fileno()
389 else:
390 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000391
392 @property
393 def mode(self):
394 return self._mode
395
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000396 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000397 """Close the SocketIO object. This doesn't close the underlying
398 socket, except if all references to it have disappeared.
399 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000400 if self.closed:
401 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000402 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000403 self._sock._decref_socketios()
404 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000405
Fred Drakea6070f02000-08-16 14:14:32 +0000406
407def getfqdn(name=''):
408 """Get fully qualified domain name from name.
409
410 An empty argument is interpreted as meaning the local host.
411
412 First the hostname returned by gethostbyaddr() is checked, then
413 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000414 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000415 """
416 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000417 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000418 name = gethostname()
419 try:
420 hostname, aliases, ipaddrs = gethostbyaddr(name)
421 except error:
422 pass
423 else:
424 aliases.insert(0, hostname)
425 for name in aliases:
426 if '.' in name:
427 break
428 else:
429 name = hostname
430 return name
431
432
Georg Brandlf78e02b2008-06-10 17:40:04 +0000433_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000434
Gregory P. Smithb4066372010-01-03 03:28:29 +0000435def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
436 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000437 """Connect to *address* and return the socket object.
438
439 Convenience function. Connect to *address* (a 2-tuple ``(host,
440 port)``) and return the socket object. Passing the optional
441 *timeout* parameter will set the timeout on the socket instance
442 before attempting to connect. If no *timeout* is supplied, the
443 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000444 is used. If *source_address* is set it must be a tuple of (host, port)
445 for the socket to bind as a source address before making the connection.
446 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000447 """
448
Guido van Rossumd8faa362007-04-27 19:54:29 +0000449 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000450 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000451 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
452 af, socktype, proto, canonname, sa = res
453 sock = None
454 try:
455 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000456 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000457 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000458 if source_address:
459 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000460 sock.connect(sa)
461 return sock
462
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000463 except error as _:
464 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000465 if sock is not None:
466 sock.close()
467
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000468 if err is not None:
469 raise err
470 else:
471 raise error("getaddrinfo returns an empty list")