blob: fd2a7d4f8c15078e82b8ab7dd14e7c592bf9df91 [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
Ethan Furman8e120ac2014-10-18 15:10:49 -070063__all__ = ["fromfd", "getfqdn", "create_connection",
64 "AddressFamily", "SocketKind"]
Skip Montanaro0de65802001-02-15 22:15:14 +000065__all__.extend(os._get_exports_list(_socket))
Thomas Wouters47b49bf2007-08-30 22:15:33 +000066
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070067# Set up the socket.AF_* socket.SOCK_* constants as members of IntEnums for
68# nicer string representations.
69# Note that _socket only knows about the integer values. The public interface
70# in this module understands the enums and translates them back from integers
71# where needed (e.g. .family property of a socket object).
72AddressFamily = IntEnum('AddressFamily',
73 {name: value for name, value in globals().items()
74 if name.isupper() and name.startswith('AF_')})
75globals().update(AddressFamily.__members__)
76
Ethan Furman7184bac2014-10-14 18:56:53 -070077SocketKind = IntEnum('SocketKind',
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070078 {name: value for name, value in globals().items()
79 if name.isupper() and name.startswith('SOCK_')})
Ethan Furman7184bac2014-10-14 18:56:53 -070080globals().update(SocketKind.__members__)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070081
82def _intenum_converter(value, enum_klass):
83 """Convert a numeric family value to an IntEnum member.
84
85 If it's not a known member, return the numeric value itself.
86 """
87 try:
88 return enum_klass(value)
89 except ValueError:
90 return value
Thomas Wouters47b49bf2007-08-30 22:15:33 +000091
92_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +000093
Fred Drakea6070f02000-08-16 14:14:32 +000094# WSA error codes
95if sys.platform.lower().startswith("win"):
96 errorTab = {}
97 errorTab[10004] = "The operation was interrupted."
98 errorTab[10009] = "A bad file handle was passed."
99 errorTab[10013] = "Permission denied."
100 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
101 errorTab[10022] = "An invalid operation was attempted."
102 errorTab[10035] = "The socket operation would block"
103 errorTab[10036] = "A blocking operation is already in progress."
104 errorTab[10048] = "The network address is in use."
105 errorTab[10054] = "The connection has been reset."
106 errorTab[10058] = "The network has been shut down."
107 errorTab[10060] = "The operation timed out."
108 errorTab[10061] = "Connection refused."
109 errorTab[10063] = "The name is too long."
110 errorTab[10064] = "The host is down."
111 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000112 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000113
Fred Drakea6070f02000-08-16 14:14:32 +0000114
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000115class socket(_socket.socket):
116
117 """A subclass of _socket.socket adding the makefile() method."""
118
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000119 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000120
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000121 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700122 # For user code address family and type values are IntEnum members, but
123 # for the underlying _socket.socket they're just integers. The
124 # constructor of _socket.socket converts the given argument to an
125 # integer automatically.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000126 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000127 self._io_refs = 0
128 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000129
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000130 def __enter__(self):
131 return self
132
133 def __exit__(self, *args):
134 if not self._closed:
135 self.close()
136
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000137 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200138 """Wrap __repr__() to reveal the real class name and socket
139 address(es).
140 """
141 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200142 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200143 % (self.__class__.__module__,
144 self.__class__.__name__,
145 " [closed]" if closed else "",
146 self.fileno(),
147 self.family,
148 self.type,
149 self.proto)
150 if not closed:
151 try:
152 laddr = self.getsockname()
153 if laddr:
154 s += ", laddr=%s" % str(laddr)
155 except error:
156 pass
157 try:
158 raddr = self.getpeername()
159 if raddr:
160 s += ", raddr=%s" % str(raddr)
161 except error:
162 pass
163 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000164 return s
165
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100166 def __getstate__(self):
167 raise TypeError("Cannot serialize socket object")
168
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000169 def dup(self):
170 """dup() -> socket object
171
Victor Stinnerdaf45552013-08-28 00:53:59 +0200172 Duplicate the socket. Return a new socket object connected to the same
173 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000174 """
175 fd = dup(self.fileno())
176 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
177 sock.settimeout(self.gettimeout())
178 return sock
179
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000180 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000181 """accept() -> (socket object, address info)
182
183 Wait for an incoming connection. Return a new socket
184 representing the connection, and the address of the client.
185 For IP sockets, the address info is a pair (hostaddr, port).
186 """
187 fd, addr = self._accept()
Antoine Pitrou600232b2011-01-05 21:03:42 +0000188 sock = socket(self.family, self.type, self.proto, fileno=fd)
189 # Issue #7995: if no default timeout is set and the listening
190 # socket had a (non-zero) timeout, force the new socket in blocking
191 # mode to override platform-specific socket flags inheritance.
192 if getdefaulttimeout() is None and self.gettimeout():
193 sock.setblocking(True)
194 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000195
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000196 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000197 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000198 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000199
200 The arguments are as for io.open() after the filename,
201 except the only mode characters supported are 'r', 'w' and 'b'.
202 The semantics are similar too. (XXX refactor to share code?)
203 """
204 for c in mode:
205 if c not in {"r", "w", "b"}:
206 raise ValueError("invalid mode %r (only r, w, b allowed)")
207 writing = "w" in mode
208 reading = "r" in mode or not writing
209 assert reading or writing
210 binary = "b" in mode
211 rawmode = ""
212 if reading:
213 rawmode += "r"
214 if writing:
215 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000216 raw = SocketIO(self, rawmode)
217 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000218 if buffering is None:
219 buffering = -1
220 if buffering < 0:
221 buffering = io.DEFAULT_BUFFER_SIZE
222 if buffering == 0:
223 if not binary:
224 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000225 return raw
226 if reading and writing:
227 buffer = io.BufferedRWPair(raw, raw, buffering)
228 elif reading:
229 buffer = io.BufferedReader(raw, buffering)
230 else:
231 assert writing
232 buffer = io.BufferedWriter(raw, buffering)
233 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000234 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000235 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000236 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000237 return text
238
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000239 def _decref_socketios(self):
240 if self._io_refs > 0:
241 self._io_refs -= 1
242 if self._closed:
243 self.close()
244
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000245 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000246 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000247 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000248
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000249 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000250 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000251 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000252 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000253 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000254
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200255 def detach(self):
256 """detach() -> file descriptor
257
258 Close the socket object without closing the underlying file descriptor.
259 The object cannot be used after this call, but the file descriptor
260 can be reused for other purposes. The file descriptor is returned.
261 """
262 self._closed = True
263 return super().detach()
264
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700265 @property
266 def family(self):
267 """Read-only access to the address family for this socket.
268 """
269 return _intenum_converter(super().family, AddressFamily)
270
271 @property
272 def type(self):
273 """Read-only access to the socket type.
274 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700275 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700276
Victor Stinnerdaf45552013-08-28 00:53:59 +0200277 if os.name == 'nt':
278 def get_inheritable(self):
279 return os.get_handle_inheritable(self.fileno())
280 def set_inheritable(self, inheritable):
281 os.set_handle_inheritable(self.fileno(), inheritable)
282 else:
283 def get_inheritable(self):
284 return os.get_inheritable(self.fileno())
285 def set_inheritable(self, inheritable):
286 os.set_inheritable(self.fileno(), inheritable)
287 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
288 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
289
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000290def fromfd(fd, family, type, proto=0):
291 """ fromfd(fd, family, type[, proto]) -> socket object
292
293 Create a socket object from a duplicate of the given file
294 descriptor. The remaining arguments are the same as for socket().
295 """
296 nfd = dup(fd)
297 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000298
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000299if hasattr(_socket.socket, "share"):
300 def fromshare(info):
301 """ fromshare(info) -> socket object
302
303 Create a socket object from a the bytes object returned by
304 socket.share(pid).
305 """
306 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700307 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000308
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000309if hasattr(_socket, "socketpair"):
310
311 def socketpair(family=None, type=SOCK_STREAM, proto=0):
312 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
313
314 Create a pair of socket objects from the sockets returned by the platform
315 socketpair() function.
316 The arguments are the same as for socket() except the default family is
317 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
318 """
319 if family is None:
320 try:
321 family = AF_UNIX
322 except NameError:
323 family = AF_INET
324 a, b = _socket.socketpair(family, type, proto)
325 a = socket(family, type, proto, a.detach())
326 b = socket(family, type, proto, b.detach())
327 return a, b
328
329
Antoine Pitrou98b46702010-09-18 22:59:00 +0000330_blocking_errnos = { EAGAIN, EWOULDBLOCK }
331
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000332class SocketIO(io.RawIOBase):
333
334 """Raw I/O implementation for stream sockets.
335
336 This class supports the makefile() method on sockets. It provides
337 the raw I/O interface on top of a socket object.
338 """
339
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000340 # One might wonder why not let FileIO do the job instead. There are two
341 # main reasons why FileIO is not adapted:
342 # - it wouldn't work under Windows (where you can't used read() and
343 # write() on a socket handle)
344 # - it wouldn't work with socket timeouts (FileIO would ignore the
345 # timeout and consider the socket non-blocking)
346
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000347 # XXX More docs
348
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000349 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000350 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000351 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000352 io.RawIOBase.__init__(self)
353 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000354 if "b" not in mode:
355 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000356 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000357 self._reading = "r" in mode
358 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000359 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000360
361 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000362 """Read up to len(b) bytes into the writable buffer *b* and return
363 the number of bytes read. If the socket is non-blocking and no bytes
364 are available, None is returned.
365
366 If *b* is non-empty, a 0 return value indicates that the connection
367 was shutdown at the other end.
368 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000369 self._checkClosed()
370 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000371 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200372 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000373 while True:
374 try:
375 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000376 except timeout:
377 self._timeout_occurred = True
378 raise
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200379 except InterruptedError:
380 continue
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000381 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200382 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000383 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000384 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000385
386 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000387 """Write the given bytes or bytearray object *b* to the socket
388 and return the number of bytes written. This can be less than
389 len(b) if not all data could be written. If the socket is
390 non-blocking and no bytes could be written None is returned.
391 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000392 self._checkClosed()
393 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000394 try:
395 return self._sock.send(b)
396 except error as e:
397 # XXX what about EINTR?
398 if e.args[0] in _blocking_errnos:
399 return None
400 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000401
402 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000403 """True if the SocketIO is open for reading.
404 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200405 if self.closed:
406 raise ValueError("I/O operation on closed socket.")
407 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000408
409 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000410 """True if the SocketIO is open for writing.
411 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200412 if self.closed:
413 raise ValueError("I/O operation on closed socket.")
414 return self._writing
415
416 def seekable(self):
417 """True if the SocketIO is open for seeking.
418 """
419 if self.closed:
420 raise ValueError("I/O operation on closed socket.")
421 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000422
423 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000424 """Return the file descriptor of the underlying socket.
425 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000426 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000427 return self._sock.fileno()
428
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000429 @property
430 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000431 if not self.closed:
432 return self.fileno()
433 else:
434 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000435
436 @property
437 def mode(self):
438 return self._mode
439
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000440 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000441 """Close the SocketIO object. This doesn't close the underlying
442 socket, except if all references to it have disappeared.
443 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000444 if self.closed:
445 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000446 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000447 self._sock._decref_socketios()
448 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000449
Fred Drakea6070f02000-08-16 14:14:32 +0000450
451def getfqdn(name=''):
452 """Get fully qualified domain name from name.
453
454 An empty argument is interpreted as meaning the local host.
455
456 First the hostname returned by gethostbyaddr() is checked, then
457 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000458 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000459 """
460 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000461 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000462 name = gethostname()
463 try:
464 hostname, aliases, ipaddrs = gethostbyaddr(name)
465 except error:
466 pass
467 else:
468 aliases.insert(0, hostname)
469 for name in aliases:
470 if '.' in name:
471 break
472 else:
473 name = hostname
474 return name
475
476
Georg Brandlf78e02b2008-06-10 17:40:04 +0000477_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000478
Gregory P. Smithb4066372010-01-03 03:28:29 +0000479def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
480 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000481 """Connect to *address* and return the socket object.
482
483 Convenience function. Connect to *address* (a 2-tuple ``(host,
484 port)``) and return the socket object. Passing the optional
485 *timeout* parameter will set the timeout on the socket instance
486 before attempting to connect. If no *timeout* is supplied, the
487 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000488 is used. If *source_address* is set it must be a tuple of (host, port)
489 for the socket to bind as a source address before making the connection.
490 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000491 """
492
Guido van Rossumd8faa362007-04-27 19:54:29 +0000493 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000494 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000495 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
496 af, socktype, proto, canonname, sa = res
497 sock = None
498 try:
499 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000500 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000501 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000502 if source_address:
503 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000504 sock.connect(sa)
505 return sock
506
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000507 except error as _:
508 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000509 if sock is not None:
510 sock.close()
511
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000512 if err is not None:
513 raise err
514 else:
515 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700516
517def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
518 """Resolve host and port into list of address info entries.
519
520 Translate the host/port argument into a sequence of 5-tuples that contain
521 all the necessary arguments for creating a socket connected to that service.
522 host is a domain name, a string representation of an IPv4/v6 address or
523 None. port is a string service name such as 'http', a numeric port number or
524 None. By passing None as the value of host and port, you can pass NULL to
525 the underlying C API.
526
527 The family, type and proto arguments can be optionally specified in order to
528 narrow the list of addresses returned. Passing zero as a value for each of
529 these arguments selects the full range of results.
530 """
531 # We override this function since we want to translate the numeric family
532 # and socket type values to enum constants.
533 addrlist = []
534 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
535 af, socktype, proto, canonname, sa = res
536 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700537 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700538 proto, canonname, sa))
539 return addrlist