blob: 740e71782af2c32ba792caeb58ffd08911b987cb [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
Giampaolo Rodola'915d1412014-06-11 03:54:30 +020052import os, sys, io, selectors
Ethan Furman40bed8a2016-09-11 13:34:42 -070053from enum import IntEnum, IntFlag
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).
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070072
Ethan Furman24e837f2015-03-18 17:27:57 -070073IntEnum._convert(
74 'AddressFamily',
75 __name__,
76 lambda C: C.isupper() and C.startswith('AF_'))
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070077
Ethan Furman24e837f2015-03-18 17:27:57 -070078IntEnum._convert(
79 'SocketKind',
80 __name__,
81 lambda C: C.isupper() and C.startswith('SOCK_'))
Charles-François Natali98c745a2014-10-14 21:22:44 +010082
Ethan Furman40bed8a2016-09-11 13:34:42 -070083IntFlag._convert(
84 'MsgFlag',
85 __name__,
86 lambda C: C.isupper() and C.startswith('MSG_'))
87
88IntFlag._convert(
89 'AddressInfo',
90 __name__,
91 lambda C: C.isupper() and C.startswith('AI_'))
92
Charles-François Natali98c745a2014-10-14 21:22:44 +010093_LOCALHOST = '127.0.0.1'
94_LOCALHOST_V6 = '::1'
95
96
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070097def _intenum_converter(value, enum_klass):
98 """Convert a numeric family value to an IntEnum member.
99
100 If it's not a known member, return the numeric value itself.
101 """
102 try:
103 return enum_klass(value)
104 except ValueError:
105 return value
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000106
107_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +0000108
Fred Drakea6070f02000-08-16 14:14:32 +0000109# WSA error codes
110if sys.platform.lower().startswith("win"):
111 errorTab = {}
112 errorTab[10004] = "The operation was interrupted."
113 errorTab[10009] = "A bad file handle was passed."
114 errorTab[10013] = "Permission denied."
115 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
116 errorTab[10022] = "An invalid operation was attempted."
117 errorTab[10035] = "The socket operation would block"
118 errorTab[10036] = "A blocking operation is already in progress."
119 errorTab[10048] = "The network address is in use."
120 errorTab[10054] = "The connection has been reset."
121 errorTab[10058] = "The network has been shut down."
122 errorTab[10060] = "The operation timed out."
123 errorTab[10061] = "Connection refused."
124 errorTab[10063] = "The name is too long."
125 errorTab[10064] = "The host is down."
126 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000127 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000128
Fred Drakea6070f02000-08-16 14:14:32 +0000129
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200130class _GiveupOnSendfile(Exception): pass
131
132
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000133class socket(_socket.socket):
134
135 """A subclass of _socket.socket adding the makefile() method."""
136
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000137 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000138
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000139 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700140 # For user code address family and type values are IntEnum members, but
141 # for the underlying _socket.socket they're just integers. The
142 # constructor of _socket.socket converts the given argument to an
143 # integer automatically.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000144 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000145 self._io_refs = 0
146 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000147
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000148 def __enter__(self):
149 return self
150
151 def __exit__(self, *args):
152 if not self._closed:
153 self.close()
154
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000155 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200156 """Wrap __repr__() to reveal the real class name and socket
157 address(es).
158 """
159 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200160 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200161 % (self.__class__.__module__,
Serhiy Storchaka521e5862014-07-22 15:00:37 +0300162 self.__class__.__qualname__,
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200163 " [closed]" if closed else "",
164 self.fileno(),
165 self.family,
166 self.type,
167 self.proto)
168 if not closed:
169 try:
170 laddr = self.getsockname()
171 if laddr:
172 s += ", laddr=%s" % str(laddr)
173 except error:
174 pass
175 try:
176 raddr = self.getpeername()
177 if raddr:
178 s += ", raddr=%s" % str(raddr)
179 except error:
180 pass
181 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000182 return s
183
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100184 def __getstate__(self):
185 raise TypeError("Cannot serialize socket object")
186
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000187 def dup(self):
188 """dup() -> socket object
189
Victor Stinnerdaf45552013-08-28 00:53:59 +0200190 Duplicate the socket. Return a new socket object connected to the same
191 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000192 """
193 fd = dup(self.fileno())
194 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
195 sock.settimeout(self.gettimeout())
196 return sock
197
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000198 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000199 """accept() -> (socket object, address info)
200
201 Wait for an incoming connection. Return a new socket
202 representing the connection, and the address of the client.
203 For IP sockets, the address info is a pair (hostaddr, port).
204 """
205 fd, addr = self._accept()
Benjamin Petersond9dbf492015-10-24 20:06:04 -0700206 # If our type has the SOCK_NONBLOCK flag, we shouldn't pass it onto the
207 # new socket. We do not currently allow passing SOCK_NONBLOCK to
208 # accept4, so the returned socket is always blocking.
209 type = self.type & ~globals().get("SOCK_NONBLOCK", 0)
210 sock = socket(self.family, type, self.proto, fileno=fd)
Antoine Pitrou600232b2011-01-05 21:03:42 +0000211 # Issue #7995: if no default timeout is set and the listening
212 # socket had a (non-zero) timeout, force the new socket in blocking
213 # mode to override platform-specific socket flags inheritance.
214 if getdefaulttimeout() is None and self.gettimeout():
215 sock.setblocking(True)
216 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000217
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000218 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000219 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000220 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000221
Berker Peksag3fe64d02016-02-18 17:34:00 +0200222 The arguments are as for io.open() after the filename, except the only
223 supported mode values are 'r' (default), 'w' and 'b'.
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000224 """
Berker Peksag3fe64d02016-02-18 17:34:00 +0200225 # XXX refactor to share code?
Serhiy Storchakafca2fc02014-11-19 12:33:40 +0200226 if not set(mode) <= {"r", "w", "b"}:
227 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000228 writing = "w" in mode
229 reading = "r" in mode or not writing
230 assert reading or writing
231 binary = "b" in mode
232 rawmode = ""
233 if reading:
234 rawmode += "r"
235 if writing:
236 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000237 raw = SocketIO(self, rawmode)
238 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000239 if buffering is None:
240 buffering = -1
241 if buffering < 0:
242 buffering = io.DEFAULT_BUFFER_SIZE
243 if buffering == 0:
244 if not binary:
245 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000246 return raw
247 if reading and writing:
248 buffer = io.BufferedRWPair(raw, raw, buffering)
249 elif reading:
250 buffer = io.BufferedReader(raw, buffering)
251 else:
252 assert writing
253 buffer = io.BufferedWriter(raw, buffering)
254 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000255 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000256 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000257 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000258 return text
259
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200260 if hasattr(os, 'sendfile'):
261
262 def _sendfile_use_sendfile(self, file, offset=0, count=None):
263 self._check_sendfile_params(file, offset, count)
264 sockno = self.fileno()
265 try:
266 fileno = file.fileno()
267 except (AttributeError, io.UnsupportedOperation) as err:
268 raise _GiveupOnSendfile(err) # not a regular file
269 try:
270 fsize = os.fstat(fileno).st_size
Berker Peksagbcfb35f2016-09-17 23:22:06 +0300271 except OSError as err:
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200272 raise _GiveupOnSendfile(err) # not a regular file
273 if not fsize:
274 return 0 # empty file
275 blocksize = fsize if not count else count
276
277 timeout = self.gettimeout()
278 if timeout == 0:
279 raise ValueError("non-blocking sockets are not supported")
280 # poll/select have the advantage of not requiring any
281 # extra file descriptor, contrarily to epoll/kqueue
282 # (also, they require a single syscall).
283 if hasattr(selectors, 'PollSelector'):
284 selector = selectors.PollSelector()
285 else:
286 selector = selectors.SelectSelector()
287 selector.register(sockno, selectors.EVENT_WRITE)
288
289 total_sent = 0
290 # localize variable access to minimize overhead
291 selector_select = selector.select
292 os_sendfile = os.sendfile
293 try:
294 while True:
295 if timeout and not selector_select(timeout):
296 raise _socket.timeout('timed out')
297 if count:
298 blocksize = count - total_sent
299 if blocksize <= 0:
300 break
301 try:
302 sent = os_sendfile(sockno, fileno, offset, blocksize)
303 except BlockingIOError:
304 if not timeout:
305 # Block until the socket is ready to send some
306 # data; avoids hogging CPU resources.
307 selector_select()
308 continue
309 except OSError as err:
310 if total_sent == 0:
311 # We can get here for different reasons, the main
312 # one being 'file' is not a regular mmap(2)-like
313 # file, in which case we'll fall back on using
314 # plain send().
315 raise _GiveupOnSendfile(err)
316 raise err from None
317 else:
318 if sent == 0:
319 break # EOF
320 offset += sent
321 total_sent += sent
322 return total_sent
323 finally:
324 if total_sent > 0 and hasattr(file, 'seek'):
325 file.seek(offset)
326 else:
327 def _sendfile_use_sendfile(self, file, offset=0, count=None):
328 raise _GiveupOnSendfile(
329 "os.sendfile() not available on this platform")
330
331 def _sendfile_use_send(self, file, offset=0, count=None):
332 self._check_sendfile_params(file, offset, count)
333 if self.gettimeout() == 0:
334 raise ValueError("non-blocking sockets are not supported")
335 if offset:
336 file.seek(offset)
337 blocksize = min(count, 8192) if count else 8192
338 total_sent = 0
339 # localize variable access to minimize overhead
340 file_read = file.read
341 sock_send = self.send
342 try:
343 while True:
344 if count:
345 blocksize = min(count - total_sent, blocksize)
346 if blocksize <= 0:
347 break
348 data = memoryview(file_read(blocksize))
349 if not data:
350 break # EOF
351 while True:
352 try:
353 sent = sock_send(data)
354 except BlockingIOError:
355 continue
356 else:
357 total_sent += sent
358 if sent < len(data):
359 data = data[sent:]
360 else:
361 break
362 return total_sent
363 finally:
364 if total_sent > 0 and hasattr(file, 'seek'):
365 file.seek(offset + total_sent)
366
367 def _check_sendfile_params(self, file, offset, count):
368 if 'b' not in getattr(file, 'mode', 'b'):
369 raise ValueError("file should be opened in binary mode")
370 if not self.type & SOCK_STREAM:
371 raise ValueError("only SOCK_STREAM type sockets are supported")
372 if count is not None:
373 if not isinstance(count, int):
374 raise TypeError(
375 "count must be a positive integer (got {!r})".format(count))
376 if count <= 0:
377 raise ValueError(
378 "count must be a positive integer (got {!r})".format(count))
379
380 def sendfile(self, file, offset=0, count=None):
381 """sendfile(file[, offset[, count]]) -> sent
382
383 Send a file until EOF is reached by using high-performance
384 os.sendfile() and return the total number of bytes which
385 were sent.
386 *file* must be a regular file object opened in binary mode.
387 If os.sendfile() is not available (e.g. Windows) or file is
388 not a regular file socket.send() will be used instead.
389 *offset* tells from where to start reading the file.
390 If specified, *count* is the total number of bytes to transmit
391 as opposed to sending the file until EOF is reached.
392 File position is updated on return or also in case of error in
393 which case file.tell() can be used to figure out the number of
394 bytes which were sent.
395 The socket must be of SOCK_STREAM type.
396 Non-blocking sockets are not supported.
397 """
398 try:
399 return self._sendfile_use_sendfile(file, offset, count)
400 except _GiveupOnSendfile:
401 return self._sendfile_use_send(file, offset, count)
402
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000403 def _decref_socketios(self):
404 if self._io_refs > 0:
405 self._io_refs -= 1
406 if self._closed:
407 self.close()
408
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000409 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000410 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000411 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000412
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000413 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000414 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000415 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000416 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000417 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000418
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200419 def detach(self):
420 """detach() -> file descriptor
421
422 Close the socket object without closing the underlying file descriptor.
423 The object cannot be used after this call, but the file descriptor
424 can be reused for other purposes. The file descriptor is returned.
425 """
426 self._closed = True
427 return super().detach()
428
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700429 @property
430 def family(self):
431 """Read-only access to the address family for this socket.
432 """
433 return _intenum_converter(super().family, AddressFamily)
434
435 @property
436 def type(self):
437 """Read-only access to the socket type.
438 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700439 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700440
Victor Stinnerdaf45552013-08-28 00:53:59 +0200441 if os.name == 'nt':
442 def get_inheritable(self):
443 return os.get_handle_inheritable(self.fileno())
444 def set_inheritable(self, inheritable):
445 os.set_handle_inheritable(self.fileno(), inheritable)
446 else:
447 def get_inheritable(self):
448 return os.get_inheritable(self.fileno())
449 def set_inheritable(self, inheritable):
450 os.set_inheritable(self.fileno(), inheritable)
451 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
452 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
453
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000454def fromfd(fd, family, type, proto=0):
455 """ fromfd(fd, family, type[, proto]) -> socket object
456
457 Create a socket object from a duplicate of the given file
458 descriptor. The remaining arguments are the same as for socket().
459 """
460 nfd = dup(fd)
461 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000462
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000463if hasattr(_socket.socket, "share"):
464 def fromshare(info):
465 """ fromshare(info) -> socket object
466
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500467 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000468 socket.share(pid).
469 """
470 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700471 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000472
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000473if hasattr(_socket, "socketpair"):
474
475 def socketpair(family=None, type=SOCK_STREAM, proto=0):
476 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
477
478 Create a pair of socket objects from the sockets returned by the platform
479 socketpair() function.
480 The arguments are the same as for socket() except the default family is
481 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
482 """
483 if family is None:
484 try:
485 family = AF_UNIX
486 except NameError:
487 family = AF_INET
488 a, b = _socket.socketpair(family, type, proto)
489 a = socket(family, type, proto, a.detach())
490 b = socket(family, type, proto, b.detach())
491 return a, b
492
Charles-François Natali98c745a2014-10-14 21:22:44 +0100493else:
494
495 # Origin: https://gist.github.com/4325783, by Geert Jansen. Public domain.
496 def socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
497 if family == AF_INET:
498 host = _LOCALHOST
499 elif family == AF_INET6:
500 host = _LOCALHOST_V6
501 else:
502 raise ValueError("Only AF_INET and AF_INET6 socket address families "
503 "are supported")
504 if type != SOCK_STREAM:
505 raise ValueError("Only SOCK_STREAM socket type is supported")
506 if proto != 0:
507 raise ValueError("Only protocol zero is supported")
508
509 # We create a connected TCP socket. Note the trick with
510 # setblocking(False) that prevents us from having to create a thread.
511 lsock = socket(family, type, proto)
512 try:
513 lsock.bind((host, 0))
514 lsock.listen()
515 # On IPv6, ignore flow_info and scope_id
516 addr, port = lsock.getsockname()[:2]
517 csock = socket(family, type, proto)
518 try:
519 csock.setblocking(False)
520 try:
521 csock.connect((addr, port))
522 except (BlockingIOError, InterruptedError):
523 pass
524 csock.setblocking(True)
525 ssock, _ = lsock.accept()
526 except:
527 csock.close()
528 raise
529 finally:
530 lsock.close()
531 return (ssock, csock)
Victor Stinner3da57432016-08-17 14:40:08 +0200532 __all__.append("socketpair")
Charles-François Natali98c745a2014-10-14 21:22:44 +0100533
534socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
535Create a pair of socket objects from the sockets returned by the platform
536socketpair() function.
537The arguments are the same as for socket() except the default family is AF_UNIX
538if defined on the platform; otherwise, the default is AF_INET.
539"""
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000540
Antoine Pitrou98b46702010-09-18 22:59:00 +0000541_blocking_errnos = { EAGAIN, EWOULDBLOCK }
542
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000543class SocketIO(io.RawIOBase):
544
545 """Raw I/O implementation for stream sockets.
546
547 This class supports the makefile() method on sockets. It provides
548 the raw I/O interface on top of a socket object.
549 """
550
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000551 # One might wonder why not let FileIO do the job instead. There are two
552 # main reasons why FileIO is not adapted:
553 # - it wouldn't work under Windows (where you can't used read() and
554 # write() on a socket handle)
555 # - it wouldn't work with socket timeouts (FileIO would ignore the
556 # timeout and consider the socket non-blocking)
557
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000558 # XXX More docs
559
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000560 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000561 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000562 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000563 io.RawIOBase.__init__(self)
564 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000565 if "b" not in mode:
566 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000567 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000568 self._reading = "r" in mode
569 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000570 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000571
572 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000573 """Read up to len(b) bytes into the writable buffer *b* and return
574 the number of bytes read. If the socket is non-blocking and no bytes
575 are available, None is returned.
576
577 If *b* is non-empty, a 0 return value indicates that the connection
578 was shutdown at the other end.
579 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000580 self._checkClosed()
581 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000582 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200583 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000584 while True:
585 try:
586 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000587 except timeout:
588 self._timeout_occurred = True
589 raise
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000590 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200591 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000592 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000593 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000594
595 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000596 """Write the given bytes or bytearray object *b* to the socket
597 and return the number of bytes written. This can be less than
598 len(b) if not all data could be written. If the socket is
599 non-blocking and no bytes could be written None is returned.
600 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000601 self._checkClosed()
602 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000603 try:
604 return self._sock.send(b)
605 except error as e:
606 # XXX what about EINTR?
607 if e.args[0] in _blocking_errnos:
608 return None
609 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000610
611 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000612 """True if the SocketIO is open for reading.
613 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200614 if self.closed:
615 raise ValueError("I/O operation on closed socket.")
616 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000617
618 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000619 """True if the SocketIO is open for writing.
620 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200621 if self.closed:
622 raise ValueError("I/O operation on closed socket.")
623 return self._writing
624
625 def seekable(self):
626 """True if the SocketIO is open for seeking.
627 """
628 if self.closed:
629 raise ValueError("I/O operation on closed socket.")
630 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000631
632 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000633 """Return the file descriptor of the underlying socket.
634 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000635 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000636 return self._sock.fileno()
637
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000638 @property
639 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000640 if not self.closed:
641 return self.fileno()
642 else:
643 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000644
645 @property
646 def mode(self):
647 return self._mode
648
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000649 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000650 """Close the SocketIO object. This doesn't close the underlying
651 socket, except if all references to it have disappeared.
652 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000653 if self.closed:
654 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000655 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000656 self._sock._decref_socketios()
657 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000658
Fred Drakea6070f02000-08-16 14:14:32 +0000659
660def getfqdn(name=''):
661 """Get fully qualified domain name from name.
662
663 An empty argument is interpreted as meaning the local host.
664
665 First the hostname returned by gethostbyaddr() is checked, then
666 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000667 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000668 """
669 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000670 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000671 name = gethostname()
672 try:
673 hostname, aliases, ipaddrs = gethostbyaddr(name)
674 except error:
675 pass
676 else:
677 aliases.insert(0, hostname)
678 for name in aliases:
679 if '.' in name:
680 break
681 else:
682 name = hostname
683 return name
684
685
Georg Brandlf78e02b2008-06-10 17:40:04 +0000686_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000687
Gregory P. Smithb4066372010-01-03 03:28:29 +0000688def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
689 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000690 """Connect to *address* and return the socket object.
691
692 Convenience function. Connect to *address* (a 2-tuple ``(host,
693 port)``) and return the socket object. Passing the optional
694 *timeout* parameter will set the timeout on the socket instance
695 before attempting to connect. If no *timeout* is supplied, the
696 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000697 is used. If *source_address* is set it must be a tuple of (host, port)
698 for the socket to bind as a source address before making the connection.
Serhiy Storchaka6a7b3a72016-04-17 08:32:47 +0300699 A host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000700 """
701
Guido van Rossumd8faa362007-04-27 19:54:29 +0000702 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000703 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000704 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
705 af, socktype, proto, canonname, sa = res
706 sock = None
707 try:
708 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000709 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000710 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000711 if source_address:
712 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000713 sock.connect(sa)
714 return sock
715
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000716 except error as _:
717 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000718 if sock is not None:
719 sock.close()
720
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000721 if err is not None:
722 raise err
723 else:
724 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700725
726def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
727 """Resolve host and port into list of address info entries.
728
729 Translate the host/port argument into a sequence of 5-tuples that contain
730 all the necessary arguments for creating a socket connected to that service.
731 host is a domain name, a string representation of an IPv4/v6 address or
732 None. port is a string service name such as 'http', a numeric port number or
733 None. By passing None as the value of host and port, you can pass NULL to
734 the underlying C API.
735
736 The family, type and proto arguments can be optionally specified in order to
737 narrow the list of addresses returned. Passing zero as a value for each of
738 these arguments selects the full range of results.
739 """
740 # We override this function since we want to translate the numeric family
741 # and socket type values to enum constants.
742 addrlist = []
743 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
744 af, socktype, proto, canonname, sa = res
745 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700746 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700747 proto, canonname, sa))
748 return addrlist