blob: ff2f087678c2e3ba7755342867d3b40c7d5a0cb4 [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).
Ethan Furman482fe042015-03-18 18:19:30 -070072IntEnum._convert(
73 'AddressFamily',
74 __name__,
75 lambda C: C.isupper() and C.startswith('AF_'))
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070076
Ethan Furman482fe042015-03-18 18:19:30 -070077IntEnum._convert(
78 'SocketKind',
79 __name__,
80 lambda C: C.isupper() and C.startswith('SOCK_'))
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()
Benjamin Petersond9dbf492015-10-24 20:06:04 -0700188 # If our type has the SOCK_NONBLOCK flag, we shouldn't pass it onto the
189 # new socket. We do not currently allow passing SOCK_NONBLOCK to
190 # accept4, so the returned socket is always blocking.
191 type = self.type & ~globals().get("SOCK_NONBLOCK", 0)
192 sock = socket(self.family, type, self.proto, fileno=fd)
Antoine Pitrou600232b2011-01-05 21:03:42 +0000193 # Issue #7995: if no default timeout is set and the listening
194 # socket had a (non-zero) timeout, force the new socket in blocking
195 # mode to override platform-specific socket flags inheritance.
196 if getdefaulttimeout() is None and self.gettimeout():
197 sock.setblocking(True)
198 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000199
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000200 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000201 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000202 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000203
204 The arguments are as for io.open() after the filename,
205 except the only mode characters supported are 'r', 'w' and 'b'.
206 The semantics are similar too. (XXX refactor to share code?)
207 """
Serhiy Storchakafca2fc02014-11-19 12:33:40 +0200208 if not set(mode) <= {"r", "w", "b"}:
209 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000210 writing = "w" in mode
211 reading = "r" in mode or not writing
212 assert reading or writing
213 binary = "b" in mode
214 rawmode = ""
215 if reading:
216 rawmode += "r"
217 if writing:
218 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000219 raw = SocketIO(self, rawmode)
220 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000221 if buffering is None:
222 buffering = -1
223 if buffering < 0:
224 buffering = io.DEFAULT_BUFFER_SIZE
225 if buffering == 0:
226 if not binary:
227 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000228 return raw
229 if reading and writing:
230 buffer = io.BufferedRWPair(raw, raw, buffering)
231 elif reading:
232 buffer = io.BufferedReader(raw, buffering)
233 else:
234 assert writing
235 buffer = io.BufferedWriter(raw, buffering)
236 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000237 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000238 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000239 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000240 return text
241
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000242 def _decref_socketios(self):
243 if self._io_refs > 0:
244 self._io_refs -= 1
245 if self._closed:
246 self.close()
247
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000248 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000249 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000250 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000251
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000252 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000253 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000254 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000255 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000256 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000257
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200258 def detach(self):
259 """detach() -> file descriptor
260
261 Close the socket object without closing the underlying file descriptor.
262 The object cannot be used after this call, but the file descriptor
263 can be reused for other purposes. The file descriptor is returned.
264 """
265 self._closed = True
266 return super().detach()
267
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700268 @property
269 def family(self):
270 """Read-only access to the address family for this socket.
271 """
272 return _intenum_converter(super().family, AddressFamily)
273
274 @property
275 def type(self):
276 """Read-only access to the socket type.
277 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700278 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700279
Victor Stinnerdaf45552013-08-28 00:53:59 +0200280 if os.name == 'nt':
281 def get_inheritable(self):
282 return os.get_handle_inheritable(self.fileno())
283 def set_inheritable(self, inheritable):
284 os.set_handle_inheritable(self.fileno(), inheritable)
285 else:
286 def get_inheritable(self):
287 return os.get_inheritable(self.fileno())
288 def set_inheritable(self, inheritable):
289 os.set_inheritable(self.fileno(), inheritable)
290 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
291 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
292
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000293def fromfd(fd, family, type, proto=0):
294 """ fromfd(fd, family, type[, proto]) -> socket object
295
296 Create a socket object from a duplicate of the given file
297 descriptor. The remaining arguments are the same as for socket().
298 """
299 nfd = dup(fd)
300 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000301
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000302if hasattr(_socket.socket, "share"):
303 def fromshare(info):
304 """ fromshare(info) -> socket object
305
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500306 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000307 socket.share(pid).
308 """
309 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700310 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000311
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000312if hasattr(_socket, "socketpair"):
313
314 def socketpair(family=None, type=SOCK_STREAM, proto=0):
315 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
316
317 Create a pair of socket objects from the sockets returned by the platform
318 socketpair() function.
319 The arguments are the same as for socket() except the default family is
320 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
321 """
322 if family is None:
323 try:
324 family = AF_UNIX
325 except NameError:
326 family = AF_INET
327 a, b = _socket.socketpair(family, type, proto)
328 a = socket(family, type, proto, a.detach())
329 b = socket(family, type, proto, b.detach())
330 return a, b
331
332
Antoine Pitrou98b46702010-09-18 22:59:00 +0000333_blocking_errnos = { EAGAIN, EWOULDBLOCK }
334
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000335class SocketIO(io.RawIOBase):
336
337 """Raw I/O implementation for stream sockets.
338
339 This class supports the makefile() method on sockets. It provides
340 the raw I/O interface on top of a socket object.
341 """
342
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000343 # One might wonder why not let FileIO do the job instead. There are two
344 # main reasons why FileIO is not adapted:
345 # - it wouldn't work under Windows (where you can't used read() and
346 # write() on a socket handle)
347 # - it wouldn't work with socket timeouts (FileIO would ignore the
348 # timeout and consider the socket non-blocking)
349
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000350 # XXX More docs
351
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000352 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000353 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000354 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000355 io.RawIOBase.__init__(self)
356 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000357 if "b" not in mode:
358 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000359 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000360 self._reading = "r" in mode
361 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000362 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000363
364 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000365 """Read up to len(b) bytes into the writable buffer *b* and return
366 the number of bytes read. If the socket is non-blocking and no bytes
367 are available, None is returned.
368
369 If *b* is non-empty, a 0 return value indicates that the connection
370 was shutdown at the other end.
371 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000372 self._checkClosed()
373 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000374 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200375 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000376 while True:
377 try:
378 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000379 except timeout:
380 self._timeout_occurred = True
381 raise
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200382 except InterruptedError:
383 continue
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000384 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200385 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000386 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000387 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000388
389 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000390 """Write the given bytes or bytearray object *b* to the socket
391 and return the number of bytes written. This can be less than
392 len(b) if not all data could be written. If the socket is
393 non-blocking and no bytes could be written None is returned.
394 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000395 self._checkClosed()
396 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000397 try:
398 return self._sock.send(b)
399 except error as e:
400 # XXX what about EINTR?
401 if e.args[0] in _blocking_errnos:
402 return None
403 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000404
405 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000406 """True if the SocketIO is open for reading.
407 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200408 if self.closed:
409 raise ValueError("I/O operation on closed socket.")
410 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000411
412 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000413 """True if the SocketIO is open for writing.
414 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200415 if self.closed:
416 raise ValueError("I/O operation on closed socket.")
417 return self._writing
418
419 def seekable(self):
420 """True if the SocketIO is open for seeking.
421 """
422 if self.closed:
423 raise ValueError("I/O operation on closed socket.")
424 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000425
426 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000427 """Return the file descriptor of the underlying socket.
428 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000429 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000430 return self._sock.fileno()
431
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000432 @property
433 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000434 if not self.closed:
435 return self.fileno()
436 else:
437 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000438
439 @property
440 def mode(self):
441 return self._mode
442
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000443 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000444 """Close the SocketIO object. This doesn't close the underlying
445 socket, except if all references to it have disappeared.
446 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000447 if self.closed:
448 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000449 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000450 self._sock._decref_socketios()
451 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000452
Fred Drakea6070f02000-08-16 14:14:32 +0000453
454def getfqdn(name=''):
455 """Get fully qualified domain name from name.
456
457 An empty argument is interpreted as meaning the local host.
458
459 First the hostname returned by gethostbyaddr() is checked, then
460 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000461 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000462 """
463 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000464 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000465 name = gethostname()
466 try:
467 hostname, aliases, ipaddrs = gethostbyaddr(name)
468 except error:
469 pass
470 else:
471 aliases.insert(0, hostname)
472 for name in aliases:
473 if '.' in name:
474 break
475 else:
476 name = hostname
477 return name
478
479
Georg Brandlf78e02b2008-06-10 17:40:04 +0000480_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000481
Gregory P. Smithb4066372010-01-03 03:28:29 +0000482def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
483 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000484 """Connect to *address* and return the socket object.
485
486 Convenience function. Connect to *address* (a 2-tuple ``(host,
487 port)``) and return the socket object. Passing the optional
488 *timeout* parameter will set the timeout on the socket instance
489 before attempting to connect. If no *timeout* is supplied, the
490 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000491 is used. If *source_address* is set it must be a tuple of (host, port)
492 for the socket to bind as a source address before making the connection.
493 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000494 """
495
Guido van Rossumd8faa362007-04-27 19:54:29 +0000496 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000497 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000498 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
499 af, socktype, proto, canonname, sa = res
500 sock = None
501 try:
502 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000503 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000504 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000505 if source_address:
506 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000507 sock.connect(sa)
508 return sock
509
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000510 except error as _:
511 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000512 if sock is not None:
513 sock.close()
514
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000515 if err is not None:
516 raise err
517 else:
518 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700519
520def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
521 """Resolve host and port into list of address info entries.
522
523 Translate the host/port argument into a sequence of 5-tuples that contain
524 all the necessary arguments for creating a socket connected to that service.
525 host is a domain name, a string representation of an IPv4/v6 address or
526 None. port is a string service name such as 'http', a numeric port number or
527 None. By passing None as the value of host and port, you can pass NULL to
528 the underlying C API.
529
530 The family, type and proto arguments can be optionally specified in order to
531 narrow the list of addresses returned. Passing zero as a value for each of
532 these arguments selects the full range of results.
533 """
534 # We override this function since we want to translate the numeric family
535 # and socket type values to enum constants.
536 addrlist = []
537 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
538 af, socktype, proto, canonname, sa = res
539 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700540 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700541 proto, canonname, sa))
542 return addrlist