blob: 8efd760696686881c94bf0edcce6faf35b77c61a [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 """
Serhiy Storchakafca2fc02014-11-19 12:33:40 +0200204 if not set(mode) <= {"r", "w", "b"}:
205 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000206 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
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500302 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000303 socket.share(pid).
304 """
305 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700306 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000307
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000308if hasattr(_socket, "socketpair"):
309
310 def socketpair(family=None, type=SOCK_STREAM, proto=0):
311 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
312
313 Create a pair of socket objects from the sockets returned by the platform
314 socketpair() function.
315 The arguments are the same as for socket() except the default family is
316 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
317 """
318 if family is None:
319 try:
320 family = AF_UNIX
321 except NameError:
322 family = AF_INET
323 a, b = _socket.socketpair(family, type, proto)
324 a = socket(family, type, proto, a.detach())
325 b = socket(family, type, proto, b.detach())
326 return a, b
327
328
Antoine Pitrou98b46702010-09-18 22:59:00 +0000329_blocking_errnos = { EAGAIN, EWOULDBLOCK }
330
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000331class SocketIO(io.RawIOBase):
332
333 """Raw I/O implementation for stream sockets.
334
335 This class supports the makefile() method on sockets. It provides
336 the raw I/O interface on top of a socket object.
337 """
338
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000339 # One might wonder why not let FileIO do the job instead. There are two
340 # main reasons why FileIO is not adapted:
341 # - it wouldn't work under Windows (where you can't used read() and
342 # write() on a socket handle)
343 # - it wouldn't work with socket timeouts (FileIO would ignore the
344 # timeout and consider the socket non-blocking)
345
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000346 # XXX More docs
347
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000348 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000349 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000350 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000351 io.RawIOBase.__init__(self)
352 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000353 if "b" not in mode:
354 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000355 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000356 self._reading = "r" in mode
357 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000358 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000359
360 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000361 """Read up to len(b) bytes into the writable buffer *b* and return
362 the number of bytes read. If the socket is non-blocking and no bytes
363 are available, None is returned.
364
365 If *b* is non-empty, a 0 return value indicates that the connection
366 was shutdown at the other end.
367 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000368 self._checkClosed()
369 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000370 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200371 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000372 while True:
373 try:
374 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000375 except timeout:
376 self._timeout_occurred = True
377 raise
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200378 except InterruptedError:
379 continue
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000380 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200381 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000382 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000383 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000384
385 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000386 """Write the given bytes or bytearray object *b* to the socket
387 and return the number of bytes written. This can be less than
388 len(b) if not all data could be written. If the socket is
389 non-blocking and no bytes could be written None is returned.
390 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000391 self._checkClosed()
392 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000393 try:
394 return self._sock.send(b)
395 except error as e:
396 # XXX what about EINTR?
397 if e.args[0] in _blocking_errnos:
398 return None
399 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000400
401 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000402 """True if the SocketIO is open for reading.
403 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200404 if self.closed:
405 raise ValueError("I/O operation on closed socket.")
406 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000407
408 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000409 """True if the SocketIO is open for writing.
410 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200411 if self.closed:
412 raise ValueError("I/O operation on closed socket.")
413 return self._writing
414
415 def seekable(self):
416 """True if the SocketIO is open for seeking.
417 """
418 if self.closed:
419 raise ValueError("I/O operation on closed socket.")
420 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000421
422 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000423 """Return the file descriptor of the underlying socket.
424 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000425 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000426 return self._sock.fileno()
427
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000428 @property
429 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000430 if not self.closed:
431 return self.fileno()
432 else:
433 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000434
435 @property
436 def mode(self):
437 return self._mode
438
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000439 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000440 """Close the SocketIO object. This doesn't close the underlying
441 socket, except if all references to it have disappeared.
442 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000443 if self.closed:
444 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000445 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000446 self._sock._decref_socketios()
447 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000448
Fred Drakea6070f02000-08-16 14:14:32 +0000449
450def getfqdn(name=''):
451 """Get fully qualified domain name from name.
452
453 An empty argument is interpreted as meaning the local host.
454
455 First the hostname returned by gethostbyaddr() is checked, then
456 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000457 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000458 """
459 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000460 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000461 name = gethostname()
462 try:
463 hostname, aliases, ipaddrs = gethostbyaddr(name)
464 except error:
465 pass
466 else:
467 aliases.insert(0, hostname)
468 for name in aliases:
469 if '.' in name:
470 break
471 else:
472 name = hostname
473 return name
474
475
Georg Brandlf78e02b2008-06-10 17:40:04 +0000476_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000477
Gregory P. Smithb4066372010-01-03 03:28:29 +0000478def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
479 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000480 """Connect to *address* and return the socket object.
481
482 Convenience function. Connect to *address* (a 2-tuple ``(host,
483 port)``) and return the socket object. Passing the optional
484 *timeout* parameter will set the timeout on the socket instance
485 before attempting to connect. If no *timeout* is supplied, the
486 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000487 is used. If *source_address* is set it must be a tuple of (host, port)
488 for the socket to bind as a source address before making the connection.
489 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000490 """
491
Guido van Rossumd8faa362007-04-27 19:54:29 +0000492 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000493 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000494 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
495 af, socktype, proto, canonname, sa = res
496 sock = None
497 try:
498 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000499 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000500 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000501 if source_address:
502 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000503 sock.connect(sa)
504 return sock
505
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000506 except error as _:
507 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000508 if sock is not None:
509 sock.close()
510
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000511 if err is not None:
512 raise err
513 else:
514 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700515
516def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
517 """Resolve host and port into list of address info entries.
518
519 Translate the host/port argument into a sequence of 5-tuples that contain
520 all the necessary arguments for creating a socket connected to that service.
521 host is a domain name, a string representation of an IPv4/v6 address or
522 None. port is a string service name such as 'http', a numeric port number or
523 None. By passing None as the value of host and port, you can pass NULL to
524 the underlying C API.
525
526 The family, type and proto arguments can be optionally specified in order to
527 narrow the list of addresses returned. Passing zero as a value for each of
528 these arguments selects the full range of results.
529 """
530 # We override this function since we want to translate the numeric family
531 # and socket type values to enum constants.
532 addrlist = []
533 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
534 af, socktype, proto, canonname, sa = res
535 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700536 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700537 proto, canonname, sa))
538 return addrlist