blob: a3bdca62bad476d1f3bc050469eb627ccea5bb43 [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
Ethan Furman7184bac2014-10-14 18:56:53 -070038IntEnum constants:
Fred Drakea6070f02000-08-16 14:14:32 +000039
40AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
41SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
42
Ethan Furman7184bac2014-10-14 18:56:53 -070043Integer constants:
44
Fred Drakea6070f02000-08-16 14:14:32 +000045Many other constants may be defined; these may be used in calls to
46the setsockopt() and getsockopt() methods.
47"""
48
Tim Peters18e67782002-02-17 04:25:24 +000049import _socket
Fred Drakea6070f02000-08-16 14:14:32 +000050from _socket import *
Tim Peters18e67782002-02-17 04:25:24 +000051
Guido van Rossum7d0a8262007-05-21 23:13:11 +000052import os, sys, io
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070053from enum import IntEnum
Fred Drakea6070f02000-08-16 14:14:32 +000054
Fred Drake70d566b2003-04-29 19:50:25 +000055try:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000056 import errno
Brett Cannoncd171c82013-07-04 17:43:24 -040057except ImportError:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000058 errno = None
59EBADF = getattr(errno, 'EBADF', 9)
Antoine Pitrou98b46702010-09-18 22:59:00 +000060EAGAIN = getattr(errno, 'EAGAIN', 11)
61EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11)
Fred Drake70d566b2003-04-29 19:50:25 +000062
Benjamin Petersonef3e4c22009-04-11 19:48:14 +000063__all__ = ["getfqdn", "create_connection"]
Skip Montanaro0de65802001-02-15 22:15:14 +000064__all__.extend(os._get_exports_list(_socket))
Thomas Wouters47b49bf2007-08-30 22:15:33 +000065
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070066# Set up the socket.AF_* socket.SOCK_* constants as members of IntEnums for
67# nicer string representations.
68# Note that _socket only knows about the integer values. The public interface
69# in this module understands the enums and translates them back from integers
70# where needed (e.g. .family property of a socket object).
71AddressFamily = IntEnum('AddressFamily',
72 {name: value for name, value in globals().items()
73 if name.isupper() and name.startswith('AF_')})
74globals().update(AddressFamily.__members__)
75
Ethan Furman7184bac2014-10-14 18:56:53 -070076SocketKind = IntEnum('SocketKind',
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070077 {name: value for name, value in globals().items()
78 if name.isupper() and name.startswith('SOCK_')})
Ethan Furman7184bac2014-10-14 18:56:53 -070079globals().update(SocketKind.__members__)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070080
81def _intenum_converter(value, enum_klass):
82 """Convert a numeric family value to an IntEnum member.
83
84 If it's not a known member, return the numeric value itself.
85 """
86 try:
87 return enum_klass(value)
88 except ValueError:
89 return value
Thomas Wouters47b49bf2007-08-30 22:15:33 +000090
91_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +000092
Fred Drakea6070f02000-08-16 14:14:32 +000093# WSA error codes
94if sys.platform.lower().startswith("win"):
95 errorTab = {}
96 errorTab[10004] = "The operation was interrupted."
97 errorTab[10009] = "A bad file handle was passed."
98 errorTab[10013] = "Permission denied."
99 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
100 errorTab[10022] = "An invalid operation was attempted."
101 errorTab[10035] = "The socket operation would block"
102 errorTab[10036] = "A blocking operation is already in progress."
103 errorTab[10048] = "The network address is in use."
104 errorTab[10054] = "The connection has been reset."
105 errorTab[10058] = "The network has been shut down."
106 errorTab[10060] = "The operation timed out."
107 errorTab[10061] = "Connection refused."
108 errorTab[10063] = "The name is too long."
109 errorTab[10064] = "The host is down."
110 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000111 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000112
Fred Drakea6070f02000-08-16 14:14:32 +0000113
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000114class socket(_socket.socket):
115
116 """A subclass of _socket.socket adding the makefile() method."""
117
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000118 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000119
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000120 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700121 # For user code address family and type values are IntEnum members, but
122 # for the underlying _socket.socket they're just integers. The
123 # constructor of _socket.socket converts the given argument to an
124 # integer automatically.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000125 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000126 self._io_refs = 0
127 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000128
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000129 def __enter__(self):
130 return self
131
132 def __exit__(self, *args):
133 if not self._closed:
134 self.close()
135
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000136 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200137 """Wrap __repr__() to reveal the real class name and socket
138 address(es).
139 """
140 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200141 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200142 % (self.__class__.__module__,
143 self.__class__.__name__,
144 " [closed]" if closed else "",
145 self.fileno(),
146 self.family,
147 self.type,
148 self.proto)
149 if not closed:
150 try:
151 laddr = self.getsockname()
152 if laddr:
153 s += ", laddr=%s" % str(laddr)
154 except error:
155 pass
156 try:
157 raddr = self.getpeername()
158 if raddr:
159 s += ", raddr=%s" % str(raddr)
160 except error:
161 pass
162 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000163 return s
164
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100165 def __getstate__(self):
166 raise TypeError("Cannot serialize socket object")
167
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000168 def dup(self):
169 """dup() -> socket object
170
Victor Stinnerdaf45552013-08-28 00:53:59 +0200171 Duplicate the socket. Return a new socket object connected to the same
172 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000173 """
174 fd = dup(self.fileno())
175 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
176 sock.settimeout(self.gettimeout())
177 return sock
178
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000179 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000180 """accept() -> (socket object, address info)
181
182 Wait for an incoming connection. Return a new socket
183 representing the connection, and the address of the client.
184 For IP sockets, the address info is a pair (hostaddr, port).
185 """
186 fd, addr = self._accept()
Antoine Pitrou600232b2011-01-05 21:03:42 +0000187 sock = socket(self.family, self.type, self.proto, fileno=fd)
188 # Issue #7995: if no default timeout is set and the listening
189 # socket had a (non-zero) timeout, force the new socket in blocking
190 # mode to override platform-specific socket flags inheritance.
191 if getdefaulttimeout() is None and self.gettimeout():
192 sock.setblocking(True)
193 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000194
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000195 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000196 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000197 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000198
199 The arguments are as for io.open() after the filename,
200 except the only mode characters supported are 'r', 'w' and 'b'.
201 The semantics are similar too. (XXX refactor to share code?)
202 """
203 for c in mode:
204 if c not in {"r", "w", "b"}:
205 raise ValueError("invalid mode %r (only r, w, b allowed)")
206 writing = "w" in mode
207 reading = "r" in mode or not writing
208 assert reading or writing
209 binary = "b" in mode
210 rawmode = ""
211 if reading:
212 rawmode += "r"
213 if writing:
214 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000215 raw = SocketIO(self, rawmode)
216 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000217 if buffering is None:
218 buffering = -1
219 if buffering < 0:
220 buffering = io.DEFAULT_BUFFER_SIZE
221 if buffering == 0:
222 if not binary:
223 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000224 return raw
225 if reading and writing:
226 buffer = io.BufferedRWPair(raw, raw, buffering)
227 elif reading:
228 buffer = io.BufferedReader(raw, buffering)
229 else:
230 assert writing
231 buffer = io.BufferedWriter(raw, buffering)
232 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000233 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000234 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000235 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000236 return text
237
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000238 def _decref_socketios(self):
239 if self._io_refs > 0:
240 self._io_refs -= 1
241 if self._closed:
242 self.close()
243
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000244 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000245 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000246 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000247
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000248 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000249 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000250 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000251 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000252 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000253
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200254 def detach(self):
255 """detach() -> file descriptor
256
257 Close the socket object without closing the underlying file descriptor.
258 The object cannot be used after this call, but the file descriptor
259 can be reused for other purposes. The file descriptor is returned.
260 """
261 self._closed = True
262 return super().detach()
263
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700264 @property
265 def family(self):
266 """Read-only access to the address family for this socket.
267 """
268 return _intenum_converter(super().family, AddressFamily)
269
270 @property
271 def type(self):
272 """Read-only access to the socket type.
273 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700274 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700275
Victor Stinnerdaf45552013-08-28 00:53:59 +0200276 if os.name == 'nt':
277 def get_inheritable(self):
278 return os.get_handle_inheritable(self.fileno())
279 def set_inheritable(self, inheritable):
280 os.set_handle_inheritable(self.fileno(), inheritable)
281 else:
282 def get_inheritable(self):
283 return os.get_inheritable(self.fileno())
284 def set_inheritable(self, inheritable):
285 os.set_inheritable(self.fileno(), inheritable)
286 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
287 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
288
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000289def fromfd(fd, family, type, proto=0):
290 """ fromfd(fd, family, type[, proto]) -> socket object
291
292 Create a socket object from a duplicate of the given file
293 descriptor. The remaining arguments are the same as for socket().
294 """
295 nfd = dup(fd)
296 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000297
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000298if hasattr(_socket.socket, "share"):
299 def fromshare(info):
300 """ fromshare(info) -> socket object
301
302 Create a socket object from a the bytes object returned by
303 socket.share(pid).
304 """
305 return socket(0, 0, 0, info)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000306
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000307if hasattr(_socket, "socketpair"):
308
309 def socketpair(family=None, type=SOCK_STREAM, proto=0):
310 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
311
312 Create a pair of socket objects from the sockets returned by the platform
313 socketpair() function.
314 The arguments are the same as for socket() except the default family is
315 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
316 """
317 if family is None:
318 try:
319 family = AF_UNIX
320 except NameError:
321 family = AF_INET
322 a, b = _socket.socketpair(family, type, proto)
323 a = socket(family, type, proto, a.detach())
324 b = socket(family, type, proto, b.detach())
325 return a, b
326
327
Antoine Pitrou98b46702010-09-18 22:59:00 +0000328_blocking_errnos = { EAGAIN, EWOULDBLOCK }
329
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000330class SocketIO(io.RawIOBase):
331
332 """Raw I/O implementation for stream sockets.
333
334 This class supports the makefile() method on sockets. It provides
335 the raw I/O interface on top of a socket object.
336 """
337
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000338 # One might wonder why not let FileIO do the job instead. There are two
339 # main reasons why FileIO is not adapted:
340 # - it wouldn't work under Windows (where you can't used read() and
341 # write() on a socket handle)
342 # - it wouldn't work with socket timeouts (FileIO would ignore the
343 # timeout and consider the socket non-blocking)
344
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000345 # XXX More docs
346
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000347 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000348 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000349 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000350 io.RawIOBase.__init__(self)
351 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000352 if "b" not in mode:
353 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000354 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000355 self._reading = "r" in mode
356 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000357 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000358
359 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000360 """Read up to len(b) bytes into the writable buffer *b* and return
361 the number of bytes read. If the socket is non-blocking and no bytes
362 are available, None is returned.
363
364 If *b* is non-empty, a 0 return value indicates that the connection
365 was shutdown at the other end.
366 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000367 self._checkClosed()
368 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000369 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200370 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000371 while True:
372 try:
373 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000374 except timeout:
375 self._timeout_occurred = True
376 raise
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200377 except InterruptedError:
378 continue
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000379 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200380 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000381 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000382 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000383
384 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000385 """Write the given bytes or bytearray object *b* to the socket
386 and return the number of bytes written. This can be less than
387 len(b) if not all data could be written. If the socket is
388 non-blocking and no bytes could be written None is returned.
389 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000390 self._checkClosed()
391 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000392 try:
393 return self._sock.send(b)
394 except error as e:
395 # XXX what about EINTR?
396 if e.args[0] in _blocking_errnos:
397 return None
398 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000399
400 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000401 """True if the SocketIO is open for reading.
402 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200403 if self.closed:
404 raise ValueError("I/O operation on closed socket.")
405 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000406
407 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000408 """True if the SocketIO is open for writing.
409 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200410 if self.closed:
411 raise ValueError("I/O operation on closed socket.")
412 return self._writing
413
414 def seekable(self):
415 """True if the SocketIO is open for seeking.
416 """
417 if self.closed:
418 raise ValueError("I/O operation on closed socket.")
419 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000420
421 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000422 """Return the file descriptor of the underlying socket.
423 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000424 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000425 return self._sock.fileno()
426
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000427 @property
428 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000429 if not self.closed:
430 return self.fileno()
431 else:
432 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000433
434 @property
435 def mode(self):
436 return self._mode
437
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000438 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000439 """Close the SocketIO object. This doesn't close the underlying
440 socket, except if all references to it have disappeared.
441 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000442 if self.closed:
443 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000444 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000445 self._sock._decref_socketios()
446 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000447
Fred Drakea6070f02000-08-16 14:14:32 +0000448
449def getfqdn(name=''):
450 """Get fully qualified domain name from name.
451
452 An empty argument is interpreted as meaning the local host.
453
454 First the hostname returned by gethostbyaddr() is checked, then
455 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000456 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000457 """
458 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000459 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000460 name = gethostname()
461 try:
462 hostname, aliases, ipaddrs = gethostbyaddr(name)
463 except error:
464 pass
465 else:
466 aliases.insert(0, hostname)
467 for name in aliases:
468 if '.' in name:
469 break
470 else:
471 name = hostname
472 return name
473
474
Georg Brandlf78e02b2008-06-10 17:40:04 +0000475_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000476
Gregory P. Smithb4066372010-01-03 03:28:29 +0000477def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
478 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000479 """Connect to *address* and return the socket object.
480
481 Convenience function. Connect to *address* (a 2-tuple ``(host,
482 port)``) and return the socket object. Passing the optional
483 *timeout* parameter will set the timeout on the socket instance
484 before attempting to connect. If no *timeout* is supplied, the
485 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000486 is used. If *source_address* is set it must be a tuple of (host, port)
487 for the socket to bind as a source address before making the connection.
488 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000489 """
490
Guido van Rossumd8faa362007-04-27 19:54:29 +0000491 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000492 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000493 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
494 af, socktype, proto, canonname, sa = res
495 sock = None
496 try:
497 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000498 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000499 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000500 if source_address:
501 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000502 sock.connect(sa)
503 return sock
504
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000505 except error as _:
506 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000507 if sock is not None:
508 sock.close()
509
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000510 if err is not None:
511 raise err
512 else:
513 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700514
515def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
516 """Resolve host and port into list of address info entries.
517
518 Translate the host/port argument into a sequence of 5-tuples that contain
519 all the necessary arguments for creating a socket connected to that service.
520 host is a domain name, a string representation of an IPv4/v6 address or
521 None. port is a string service name such as 'http', a numeric port number or
522 None. By passing None as the value of host and port, you can pass NULL to
523 the underlying C API.
524
525 The family, type and proto arguments can be optionally specified in order to
526 narrow the list of addresses returned. Passing zero as a value for each of
527 these arguments selects the full range of results.
528 """
529 # We override this function since we want to translate the numeric family
530 # and socket type values to enum constants.
531 addrlist = []
532 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
533 af, socktype, proto, canonname, sa = res
534 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700535 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700536 proto, canonname, sa))
537 return addrlist