blob: db34ab37ee676cae8479260fb377379c249ccf0d [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
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).
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
83_LOCALHOST = '127.0.0.1'
84_LOCALHOST_V6 = '::1'
85
86
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070087def _intenum_converter(value, enum_klass):
88 """Convert a numeric family value to an IntEnum member.
89
90 If it's not a known member, return the numeric value itself.
91 """
92 try:
93 return enum_klass(value)
94 except ValueError:
95 return value
Thomas Wouters47b49bf2007-08-30 22:15:33 +000096
97_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +000098
Fred Drakea6070f02000-08-16 14:14:32 +000099# WSA error codes
100if sys.platform.lower().startswith("win"):
101 errorTab = {}
102 errorTab[10004] = "The operation was interrupted."
103 errorTab[10009] = "A bad file handle was passed."
104 errorTab[10013] = "Permission denied."
105 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
106 errorTab[10022] = "An invalid operation was attempted."
107 errorTab[10035] = "The socket operation would block"
108 errorTab[10036] = "A blocking operation is already in progress."
109 errorTab[10048] = "The network address is in use."
110 errorTab[10054] = "The connection has been reset."
111 errorTab[10058] = "The network has been shut down."
112 errorTab[10060] = "The operation timed out."
113 errorTab[10061] = "Connection refused."
114 errorTab[10063] = "The name is too long."
115 errorTab[10064] = "The host is down."
116 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000117 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000118
Fred Drakea6070f02000-08-16 14:14:32 +0000119
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200120class _GiveupOnSendfile(Exception): pass
121
122
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000123class socket(_socket.socket):
124
125 """A subclass of _socket.socket adding the makefile() method."""
126
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000127 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000128
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000129 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700130 # For user code address family and type values are IntEnum members, but
131 # for the underlying _socket.socket they're just integers. The
132 # constructor of _socket.socket converts the given argument to an
133 # integer automatically.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000134 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000135 self._io_refs = 0
136 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000137
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000138 def __enter__(self):
139 return self
140
141 def __exit__(self, *args):
142 if not self._closed:
143 self.close()
144
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000145 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200146 """Wrap __repr__() to reveal the real class name and socket
147 address(es).
148 """
149 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200150 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200151 % (self.__class__.__module__,
Serhiy Storchaka521e5862014-07-22 15:00:37 +0300152 self.__class__.__qualname__,
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200153 " [closed]" if closed else "",
154 self.fileno(),
155 self.family,
156 self.type,
157 self.proto)
158 if not closed:
159 try:
160 laddr = self.getsockname()
161 if laddr:
162 s += ", laddr=%s" % str(laddr)
163 except error:
164 pass
165 try:
166 raddr = self.getpeername()
167 if raddr:
168 s += ", raddr=%s" % str(raddr)
169 except error:
170 pass
171 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000172 return s
173
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100174 def __getstate__(self):
175 raise TypeError("Cannot serialize socket object")
176
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000177 def dup(self):
178 """dup() -> socket object
179
Victor Stinnerdaf45552013-08-28 00:53:59 +0200180 Duplicate the socket. Return a new socket object connected to the same
181 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000182 """
183 fd = dup(self.fileno())
184 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
185 sock.settimeout(self.gettimeout())
186 return sock
187
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000188 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000189 """accept() -> (socket object, address info)
190
191 Wait for an incoming connection. Return a new socket
192 representing the connection, and the address of the client.
193 For IP sockets, the address info is a pair (hostaddr, port).
194 """
195 fd, addr = self._accept()
Antoine Pitrou600232b2011-01-05 21:03:42 +0000196 sock = socket(self.family, self.type, self.proto, fileno=fd)
197 # Issue #7995: if no default timeout is set and the listening
198 # socket had a (non-zero) timeout, force the new socket in blocking
199 # mode to override platform-specific socket flags inheritance.
200 if getdefaulttimeout() is None and self.gettimeout():
201 sock.setblocking(True)
202 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000203
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000204 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000205 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000206 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000207
208 The arguments are as for io.open() after the filename,
209 except the only mode characters supported are 'r', 'w' and 'b'.
210 The semantics are similar too. (XXX refactor to share code?)
211 """
Serhiy Storchakafca2fc02014-11-19 12:33:40 +0200212 if not set(mode) <= {"r", "w", "b"}:
213 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000214 writing = "w" in mode
215 reading = "r" in mode or not writing
216 assert reading or writing
217 binary = "b" in mode
218 rawmode = ""
219 if reading:
220 rawmode += "r"
221 if writing:
222 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000223 raw = SocketIO(self, rawmode)
224 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000225 if buffering is None:
226 buffering = -1
227 if buffering < 0:
228 buffering = io.DEFAULT_BUFFER_SIZE
229 if buffering == 0:
230 if not binary:
231 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000232 return raw
233 if reading and writing:
234 buffer = io.BufferedRWPair(raw, raw, buffering)
235 elif reading:
236 buffer = io.BufferedReader(raw, buffering)
237 else:
238 assert writing
239 buffer = io.BufferedWriter(raw, buffering)
240 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000241 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000242 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000243 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000244 return text
245
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200246 if hasattr(os, 'sendfile'):
247
248 def _sendfile_use_sendfile(self, file, offset=0, count=None):
249 self._check_sendfile_params(file, offset, count)
250 sockno = self.fileno()
251 try:
252 fileno = file.fileno()
253 except (AttributeError, io.UnsupportedOperation) as err:
254 raise _GiveupOnSendfile(err) # not a regular file
255 try:
256 fsize = os.fstat(fileno).st_size
257 except OSError:
258 raise _GiveupOnSendfile(err) # not a regular file
259 if not fsize:
260 return 0 # empty file
261 blocksize = fsize if not count else count
262
263 timeout = self.gettimeout()
264 if timeout == 0:
265 raise ValueError("non-blocking sockets are not supported")
266 # poll/select have the advantage of not requiring any
267 # extra file descriptor, contrarily to epoll/kqueue
268 # (also, they require a single syscall).
269 if hasattr(selectors, 'PollSelector'):
270 selector = selectors.PollSelector()
271 else:
272 selector = selectors.SelectSelector()
273 selector.register(sockno, selectors.EVENT_WRITE)
274
275 total_sent = 0
276 # localize variable access to minimize overhead
277 selector_select = selector.select
278 os_sendfile = os.sendfile
279 try:
280 while True:
281 if timeout and not selector_select(timeout):
282 raise _socket.timeout('timed out')
283 if count:
284 blocksize = count - total_sent
285 if blocksize <= 0:
286 break
287 try:
288 sent = os_sendfile(sockno, fileno, offset, blocksize)
289 except BlockingIOError:
290 if not timeout:
291 # Block until the socket is ready to send some
292 # data; avoids hogging CPU resources.
293 selector_select()
294 continue
295 except OSError as err:
296 if total_sent == 0:
297 # We can get here for different reasons, the main
298 # one being 'file' is not a regular mmap(2)-like
299 # file, in which case we'll fall back on using
300 # plain send().
301 raise _GiveupOnSendfile(err)
302 raise err from None
303 else:
304 if sent == 0:
305 break # EOF
306 offset += sent
307 total_sent += sent
308 return total_sent
309 finally:
310 if total_sent > 0 and hasattr(file, 'seek'):
311 file.seek(offset)
312 else:
313 def _sendfile_use_sendfile(self, file, offset=0, count=None):
314 raise _GiveupOnSendfile(
315 "os.sendfile() not available on this platform")
316
317 def _sendfile_use_send(self, file, offset=0, count=None):
318 self._check_sendfile_params(file, offset, count)
319 if self.gettimeout() == 0:
320 raise ValueError("non-blocking sockets are not supported")
321 if offset:
322 file.seek(offset)
323 blocksize = min(count, 8192) if count else 8192
324 total_sent = 0
325 # localize variable access to minimize overhead
326 file_read = file.read
327 sock_send = self.send
328 try:
329 while True:
330 if count:
331 blocksize = min(count - total_sent, blocksize)
332 if blocksize <= 0:
333 break
334 data = memoryview(file_read(blocksize))
335 if not data:
336 break # EOF
337 while True:
338 try:
339 sent = sock_send(data)
340 except BlockingIOError:
341 continue
342 else:
343 total_sent += sent
344 if sent < len(data):
345 data = data[sent:]
346 else:
347 break
348 return total_sent
349 finally:
350 if total_sent > 0 and hasattr(file, 'seek'):
351 file.seek(offset + total_sent)
352
353 def _check_sendfile_params(self, file, offset, count):
354 if 'b' not in getattr(file, 'mode', 'b'):
355 raise ValueError("file should be opened in binary mode")
356 if not self.type & SOCK_STREAM:
357 raise ValueError("only SOCK_STREAM type sockets are supported")
358 if count is not None:
359 if not isinstance(count, int):
360 raise TypeError(
361 "count must be a positive integer (got {!r})".format(count))
362 if count <= 0:
363 raise ValueError(
364 "count must be a positive integer (got {!r})".format(count))
365
366 def sendfile(self, file, offset=0, count=None):
367 """sendfile(file[, offset[, count]]) -> sent
368
369 Send a file until EOF is reached by using high-performance
370 os.sendfile() and return the total number of bytes which
371 were sent.
372 *file* must be a regular file object opened in binary mode.
373 If os.sendfile() is not available (e.g. Windows) or file is
374 not a regular file socket.send() will be used instead.
375 *offset* tells from where to start reading the file.
376 If specified, *count* is the total number of bytes to transmit
377 as opposed to sending the file until EOF is reached.
378 File position is updated on return or also in case of error in
379 which case file.tell() can be used to figure out the number of
380 bytes which were sent.
381 The socket must be of SOCK_STREAM type.
382 Non-blocking sockets are not supported.
383 """
384 try:
385 return self._sendfile_use_sendfile(file, offset, count)
386 except _GiveupOnSendfile:
387 return self._sendfile_use_send(file, offset, count)
388
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000389 def _decref_socketios(self):
390 if self._io_refs > 0:
391 self._io_refs -= 1
392 if self._closed:
393 self.close()
394
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000395 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000396 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000397 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000398
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000399 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000400 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000401 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000402 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000403 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000404
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200405 def detach(self):
406 """detach() -> file descriptor
407
408 Close the socket object without closing the underlying file descriptor.
409 The object cannot be used after this call, but the file descriptor
410 can be reused for other purposes. The file descriptor is returned.
411 """
412 self._closed = True
413 return super().detach()
414
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700415 @property
416 def family(self):
417 """Read-only access to the address family for this socket.
418 """
419 return _intenum_converter(super().family, AddressFamily)
420
421 @property
422 def type(self):
423 """Read-only access to the socket type.
424 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700425 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700426
Victor Stinnerdaf45552013-08-28 00:53:59 +0200427 if os.name == 'nt':
428 def get_inheritable(self):
429 return os.get_handle_inheritable(self.fileno())
430 def set_inheritable(self, inheritable):
431 os.set_handle_inheritable(self.fileno(), inheritable)
432 else:
433 def get_inheritable(self):
434 return os.get_inheritable(self.fileno())
435 def set_inheritable(self, inheritable):
436 os.set_inheritable(self.fileno(), inheritable)
437 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
438 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
439
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000440def fromfd(fd, family, type, proto=0):
441 """ fromfd(fd, family, type[, proto]) -> socket object
442
443 Create a socket object from a duplicate of the given file
444 descriptor. The remaining arguments are the same as for socket().
445 """
446 nfd = dup(fd)
447 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000448
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000449if hasattr(_socket.socket, "share"):
450 def fromshare(info):
451 """ fromshare(info) -> socket object
452
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500453 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000454 socket.share(pid).
455 """
456 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700457 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000458
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000459if hasattr(_socket, "socketpair"):
460
461 def socketpair(family=None, type=SOCK_STREAM, proto=0):
462 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
463
464 Create a pair of socket objects from the sockets returned by the platform
465 socketpair() function.
466 The arguments are the same as for socket() except the default family is
467 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
468 """
469 if family is None:
470 try:
471 family = AF_UNIX
472 except NameError:
473 family = AF_INET
474 a, b = _socket.socketpair(family, type, proto)
475 a = socket(family, type, proto, a.detach())
476 b = socket(family, type, proto, b.detach())
477 return a, b
478
Charles-François Natali98c745a2014-10-14 21:22:44 +0100479else:
480
481 # Origin: https://gist.github.com/4325783, by Geert Jansen. Public domain.
482 def socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
483 if family == AF_INET:
484 host = _LOCALHOST
485 elif family == AF_INET6:
486 host = _LOCALHOST_V6
487 else:
488 raise ValueError("Only AF_INET and AF_INET6 socket address families "
489 "are supported")
490 if type != SOCK_STREAM:
491 raise ValueError("Only SOCK_STREAM socket type is supported")
492 if proto != 0:
493 raise ValueError("Only protocol zero is supported")
494
495 # We create a connected TCP socket. Note the trick with
496 # setblocking(False) that prevents us from having to create a thread.
497 lsock = socket(family, type, proto)
498 try:
499 lsock.bind((host, 0))
500 lsock.listen()
501 # On IPv6, ignore flow_info and scope_id
502 addr, port = lsock.getsockname()[:2]
503 csock = socket(family, type, proto)
504 try:
505 csock.setblocking(False)
506 try:
507 csock.connect((addr, port))
508 except (BlockingIOError, InterruptedError):
509 pass
510 csock.setblocking(True)
511 ssock, _ = lsock.accept()
512 except:
513 csock.close()
514 raise
515 finally:
516 lsock.close()
517 return (ssock, csock)
518
519socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
520Create a pair of socket objects from the sockets returned by the platform
521socketpair() function.
522The arguments are the same as for socket() except the default family is AF_UNIX
523if defined on the platform; otherwise, the default is AF_INET.
524"""
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000525
Antoine Pitrou98b46702010-09-18 22:59:00 +0000526_blocking_errnos = { EAGAIN, EWOULDBLOCK }
527
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000528class SocketIO(io.RawIOBase):
529
530 """Raw I/O implementation for stream sockets.
531
532 This class supports the makefile() method on sockets. It provides
533 the raw I/O interface on top of a socket object.
534 """
535
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000536 # One might wonder why not let FileIO do the job instead. There are two
537 # main reasons why FileIO is not adapted:
538 # - it wouldn't work under Windows (where you can't used read() and
539 # write() on a socket handle)
540 # - it wouldn't work with socket timeouts (FileIO would ignore the
541 # timeout and consider the socket non-blocking)
542
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000543 # XXX More docs
544
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000545 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000546 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000547 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000548 io.RawIOBase.__init__(self)
549 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000550 if "b" not in mode:
551 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000552 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000553 self._reading = "r" in mode
554 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000555 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000556
557 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000558 """Read up to len(b) bytes into the writable buffer *b* and return
559 the number of bytes read. If the socket is non-blocking and no bytes
560 are available, None is returned.
561
562 If *b* is non-empty, a 0 return value indicates that the connection
563 was shutdown at the other end.
564 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000565 self._checkClosed()
566 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000567 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200568 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000569 while True:
570 try:
571 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000572 except timeout:
573 self._timeout_occurred = True
574 raise
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000575 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200576 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000577 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000578 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000579
580 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000581 """Write the given bytes or bytearray object *b* to the socket
582 and return the number of bytes written. This can be less than
583 len(b) if not all data could be written. If the socket is
584 non-blocking and no bytes could be written None is returned.
585 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000586 self._checkClosed()
587 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000588 try:
589 return self._sock.send(b)
590 except error as e:
591 # XXX what about EINTR?
592 if e.args[0] in _blocking_errnos:
593 return None
594 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000595
596 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000597 """True if the SocketIO is open for reading.
598 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200599 if self.closed:
600 raise ValueError("I/O operation on closed socket.")
601 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000602
603 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000604 """True if the SocketIO is open for writing.
605 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200606 if self.closed:
607 raise ValueError("I/O operation on closed socket.")
608 return self._writing
609
610 def seekable(self):
611 """True if the SocketIO is open for seeking.
612 """
613 if self.closed:
614 raise ValueError("I/O operation on closed socket.")
615 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000616
617 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000618 """Return the file descriptor of the underlying socket.
619 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000620 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000621 return self._sock.fileno()
622
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000623 @property
624 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000625 if not self.closed:
626 return self.fileno()
627 else:
628 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000629
630 @property
631 def mode(self):
632 return self._mode
633
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000634 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000635 """Close the SocketIO object. This doesn't close the underlying
636 socket, except if all references to it have disappeared.
637 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000638 if self.closed:
639 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000640 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000641 self._sock._decref_socketios()
642 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000643
Fred Drakea6070f02000-08-16 14:14:32 +0000644
645def getfqdn(name=''):
646 """Get fully qualified domain name from name.
647
648 An empty argument is interpreted as meaning the local host.
649
650 First the hostname returned by gethostbyaddr() is checked, then
651 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000652 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000653 """
654 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000655 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000656 name = gethostname()
657 try:
658 hostname, aliases, ipaddrs = gethostbyaddr(name)
659 except error:
660 pass
661 else:
662 aliases.insert(0, hostname)
663 for name in aliases:
664 if '.' in name:
665 break
666 else:
667 name = hostname
668 return name
669
670
Georg Brandlf78e02b2008-06-10 17:40:04 +0000671_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000672
Gregory P. Smithb4066372010-01-03 03:28:29 +0000673def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
674 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000675 """Connect to *address* and return the socket object.
676
677 Convenience function. Connect to *address* (a 2-tuple ``(host,
678 port)``) and return the socket object. Passing the optional
679 *timeout* parameter will set the timeout on the socket instance
680 before attempting to connect. If no *timeout* is supplied, the
681 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000682 is used. If *source_address* is set it must be a tuple of (host, port)
683 for the socket to bind as a source address before making the connection.
684 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000685 """
686
Guido van Rossumd8faa362007-04-27 19:54:29 +0000687 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000688 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000689 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
690 af, socktype, proto, canonname, sa = res
691 sock = None
692 try:
693 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000694 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000695 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000696 if source_address:
697 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000698 sock.connect(sa)
699 return sock
700
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000701 except error as _:
702 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000703 if sock is not None:
704 sock.close()
705
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000706 if err is not None:
707 raise err
708 else:
709 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700710
711def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
712 """Resolve host and port into list of address info entries.
713
714 Translate the host/port argument into a sequence of 5-tuples that contain
715 all the necessary arguments for creating a socket connected to that service.
716 host is a domain name, a string representation of an IPv4/v6 address or
717 None. port is a string service name such as 'http', a numeric port number or
718 None. By passing None as the value of host and port, you can pass NULL to
719 the underlying C API.
720
721 The family, type and proto arguments can be optionally specified in order to
722 narrow the list of addresses returned. Passing zero as a value for each of
723 these arguments selects the full range of results.
724 """
725 # We override this function since we want to translate the numeric family
726 # and socket type values to enum constants.
727 addrlist = []
728 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
729 af, socktype, proto, canonname, sa = res
730 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700731 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700732 proto, canonname, sa))
733 return addrlist