blob: cbadff7239373a1310e9dbf080a874003a4272b1 [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
38Integer constants:
39
40AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
41SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
42
43Many other constants may be defined; these may be used in calls to
44the setsockopt() and getsockopt() methods.
45"""
46
Tim Peters18e67782002-02-17 04:25:24 +000047import _socket
Fred Drakea6070f02000-08-16 14:14:32 +000048from _socket import *
Tim Peters18e67782002-02-17 04:25:24 +000049
Giampaolo Rodola'915d1412014-06-11 03:54:30 +020050import os, sys, io, selectors
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070051from enum import IntEnum
Fred Drakea6070f02000-08-16 14:14:32 +000052
Fred Drake70d566b2003-04-29 19:50:25 +000053try:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000054 import errno
Brett Cannoncd171c82013-07-04 17:43:24 -040055except ImportError:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000056 errno = None
57EBADF = getattr(errno, 'EBADF', 9)
Antoine Pitrou98b46702010-09-18 22:59:00 +000058EAGAIN = getattr(errno, 'EAGAIN', 11)
59EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11)
Fred Drake70d566b2003-04-29 19:50:25 +000060
Benjamin Petersonef3e4c22009-04-11 19:48:14 +000061__all__ = ["getfqdn", "create_connection"]
Skip Montanaro0de65802001-02-15 22:15:14 +000062__all__.extend(os._get_exports_list(_socket))
Thomas Wouters47b49bf2007-08-30 22:15:33 +000063
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070064# Set up the socket.AF_* socket.SOCK_* constants as members of IntEnums for
65# nicer string representations.
66# Note that _socket only knows about the integer values. The public interface
67# in this module understands the enums and translates them back from integers
68# where needed (e.g. .family property of a socket object).
69AddressFamily = IntEnum('AddressFamily',
70 {name: value for name, value in globals().items()
71 if name.isupper() and name.startswith('AF_')})
72globals().update(AddressFamily.__members__)
73
74SocketType = IntEnum('SocketType',
75 {name: value for name, value in globals().items()
76 if name.isupper() and name.startswith('SOCK_')})
77globals().update(SocketType.__members__)
78
79def _intenum_converter(value, enum_klass):
80 """Convert a numeric family value to an IntEnum member.
81
82 If it's not a known member, return the numeric value itself.
83 """
84 try:
85 return enum_klass(value)
86 except ValueError:
87 return value
Thomas Wouters47b49bf2007-08-30 22:15:33 +000088
89_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +000090
Fred Drakea6070f02000-08-16 14:14:32 +000091# WSA error codes
92if sys.platform.lower().startswith("win"):
93 errorTab = {}
94 errorTab[10004] = "The operation was interrupted."
95 errorTab[10009] = "A bad file handle was passed."
96 errorTab[10013] = "Permission denied."
97 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
98 errorTab[10022] = "An invalid operation was attempted."
99 errorTab[10035] = "The socket operation would block"
100 errorTab[10036] = "A blocking operation is already in progress."
101 errorTab[10048] = "The network address is in use."
102 errorTab[10054] = "The connection has been reset."
103 errorTab[10058] = "The network has been shut down."
104 errorTab[10060] = "The operation timed out."
105 errorTab[10061] = "Connection refused."
106 errorTab[10063] = "The name is too long."
107 errorTab[10064] = "The host is down."
108 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000109 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000110
Fred Drakea6070f02000-08-16 14:14:32 +0000111
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200112class _GiveupOnSendfile(Exception): pass
113
114
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000115class socket(_socket.socket):
116
117 """A subclass of _socket.socket adding the makefile() method."""
118
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000119 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000120
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000121 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700122 # For user code address family and type values are IntEnum members, but
123 # for the underlying _socket.socket they're just integers. The
124 # constructor of _socket.socket converts the given argument to an
125 # integer automatically.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000126 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000127 self._io_refs = 0
128 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000129
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000130 def __enter__(self):
131 return self
132
133 def __exit__(self, *args):
134 if not self._closed:
135 self.close()
136
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000137 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200138 """Wrap __repr__() to reveal the real class name and socket
139 address(es).
140 """
141 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200142 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200143 % (self.__class__.__module__,
144 self.__class__.__name__,
145 " [closed]" if closed else "",
146 self.fileno(),
147 self.family,
148 self.type,
149 self.proto)
150 if not closed:
151 try:
152 laddr = self.getsockname()
153 if laddr:
154 s += ", laddr=%s" % str(laddr)
155 except error:
156 pass
157 try:
158 raddr = self.getpeername()
159 if raddr:
160 s += ", raddr=%s" % str(raddr)
161 except error:
162 pass
163 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000164 return s
165
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100166 def __getstate__(self):
167 raise TypeError("Cannot serialize socket object")
168
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000169 def dup(self):
170 """dup() -> socket object
171
Victor Stinnerdaf45552013-08-28 00:53:59 +0200172 Duplicate the socket. Return a new socket object connected to the same
173 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000174 """
175 fd = dup(self.fileno())
176 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
177 sock.settimeout(self.gettimeout())
178 return sock
179
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000180 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000181 """accept() -> (socket object, address info)
182
183 Wait for an incoming connection. Return a new socket
184 representing the connection, and the address of the client.
185 For IP sockets, the address info is a pair (hostaddr, port).
186 """
187 fd, addr = self._accept()
Antoine Pitrou600232b2011-01-05 21:03:42 +0000188 sock = socket(self.family, self.type, self.proto, fileno=fd)
189 # Issue #7995: if no default timeout is set and the listening
190 # socket had a (non-zero) timeout, force the new socket in blocking
191 # mode to override platform-specific socket flags inheritance.
192 if getdefaulttimeout() is None and self.gettimeout():
193 sock.setblocking(True)
194 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000195
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000196 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000197 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000198 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000199
200 The arguments are as for io.open() after the filename,
201 except the only mode characters supported are 'r', 'w' and 'b'.
202 The semantics are similar too. (XXX refactor to share code?)
203 """
204 for c in mode:
205 if c not in {"r", "w", "b"}:
206 raise ValueError("invalid mode %r (only r, w, b allowed)")
207 writing = "w" in mode
208 reading = "r" in mode or not writing
209 assert reading or writing
210 binary = "b" in mode
211 rawmode = ""
212 if reading:
213 rawmode += "r"
214 if writing:
215 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000216 raw = SocketIO(self, rawmode)
217 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000218 if buffering is None:
219 buffering = -1
220 if buffering < 0:
221 buffering = io.DEFAULT_BUFFER_SIZE
222 if buffering == 0:
223 if not binary:
224 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000225 return raw
226 if reading and writing:
227 buffer = io.BufferedRWPair(raw, raw, buffering)
228 elif reading:
229 buffer = io.BufferedReader(raw, buffering)
230 else:
231 assert writing
232 buffer = io.BufferedWriter(raw, buffering)
233 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000234 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000235 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000236 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000237 return text
238
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200239 if hasattr(os, 'sendfile'):
240
241 def _sendfile_use_sendfile(self, file, offset=0, count=None):
242 self._check_sendfile_params(file, offset, count)
243 sockno = self.fileno()
244 try:
245 fileno = file.fileno()
246 except (AttributeError, io.UnsupportedOperation) as err:
247 raise _GiveupOnSendfile(err) # not a regular file
248 try:
249 fsize = os.fstat(fileno).st_size
250 except OSError:
251 raise _GiveupOnSendfile(err) # not a regular file
252 if not fsize:
253 return 0 # empty file
254 blocksize = fsize if not count else count
255
256 timeout = self.gettimeout()
257 if timeout == 0:
258 raise ValueError("non-blocking sockets are not supported")
259 # poll/select have the advantage of not requiring any
260 # extra file descriptor, contrarily to epoll/kqueue
261 # (also, they require a single syscall).
262 if hasattr(selectors, 'PollSelector'):
263 selector = selectors.PollSelector()
264 else:
265 selector = selectors.SelectSelector()
266 selector.register(sockno, selectors.EVENT_WRITE)
267
268 total_sent = 0
269 # localize variable access to minimize overhead
270 selector_select = selector.select
271 os_sendfile = os.sendfile
272 try:
273 while True:
274 if timeout and not selector_select(timeout):
275 raise _socket.timeout('timed out')
276 if count:
277 blocksize = count - total_sent
278 if blocksize <= 0:
279 break
280 try:
281 sent = os_sendfile(sockno, fileno, offset, blocksize)
282 except BlockingIOError:
283 if not timeout:
284 # Block until the socket is ready to send some
285 # data; avoids hogging CPU resources.
286 selector_select()
287 continue
288 except OSError as err:
289 if total_sent == 0:
290 # We can get here for different reasons, the main
291 # one being 'file' is not a regular mmap(2)-like
292 # file, in which case we'll fall back on using
293 # plain send().
294 raise _GiveupOnSendfile(err)
295 raise err from None
296 else:
297 if sent == 0:
298 break # EOF
299 offset += sent
300 total_sent += sent
301 return total_sent
302 finally:
303 if total_sent > 0 and hasattr(file, 'seek'):
304 file.seek(offset)
305 else:
306 def _sendfile_use_sendfile(self, file, offset=0, count=None):
307 raise _GiveupOnSendfile(
308 "os.sendfile() not available on this platform")
309
310 def _sendfile_use_send(self, file, offset=0, count=None):
311 self._check_sendfile_params(file, offset, count)
312 if self.gettimeout() == 0:
313 raise ValueError("non-blocking sockets are not supported")
314 if offset:
315 file.seek(offset)
316 blocksize = min(count, 8192) if count else 8192
317 total_sent = 0
318 # localize variable access to minimize overhead
319 file_read = file.read
320 sock_send = self.send
321 try:
322 while True:
323 if count:
324 blocksize = min(count - total_sent, blocksize)
325 if blocksize <= 0:
326 break
327 data = memoryview(file_read(blocksize))
328 if not data:
329 break # EOF
330 while True:
331 try:
332 sent = sock_send(data)
333 except BlockingIOError:
334 continue
335 else:
336 total_sent += sent
337 if sent < len(data):
338 data = data[sent:]
339 else:
340 break
341 return total_sent
342 finally:
343 if total_sent > 0 and hasattr(file, 'seek'):
344 file.seek(offset + total_sent)
345
346 def _check_sendfile_params(self, file, offset, count):
347 if 'b' not in getattr(file, 'mode', 'b'):
348 raise ValueError("file should be opened in binary mode")
349 if not self.type & SOCK_STREAM:
350 raise ValueError("only SOCK_STREAM type sockets are supported")
351 if count is not None:
352 if not isinstance(count, int):
353 raise TypeError(
354 "count must be a positive integer (got {!r})".format(count))
355 if count <= 0:
356 raise ValueError(
357 "count must be a positive integer (got {!r})".format(count))
358
359 def sendfile(self, file, offset=0, count=None):
360 """sendfile(file[, offset[, count]]) -> sent
361
362 Send a file until EOF is reached by using high-performance
363 os.sendfile() and return the total number of bytes which
364 were sent.
365 *file* must be a regular file object opened in binary mode.
366 If os.sendfile() is not available (e.g. Windows) or file is
367 not a regular file socket.send() will be used instead.
368 *offset* tells from where to start reading the file.
369 If specified, *count* is the total number of bytes to transmit
370 as opposed to sending the file until EOF is reached.
371 File position is updated on return or also in case of error in
372 which case file.tell() can be used to figure out the number of
373 bytes which were sent.
374 The socket must be of SOCK_STREAM type.
375 Non-blocking sockets are not supported.
376 """
377 try:
378 return self._sendfile_use_sendfile(file, offset, count)
379 except _GiveupOnSendfile:
380 return self._sendfile_use_send(file, offset, count)
381
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000382 def _decref_socketios(self):
383 if self._io_refs > 0:
384 self._io_refs -= 1
385 if self._closed:
386 self.close()
387
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000388 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000389 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000390 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000391
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000392 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000393 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000394 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000395 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000396 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000397
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200398 def detach(self):
399 """detach() -> file descriptor
400
401 Close the socket object without closing the underlying file descriptor.
402 The object cannot be used after this call, but the file descriptor
403 can be reused for other purposes. The file descriptor is returned.
404 """
405 self._closed = True
406 return super().detach()
407
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700408 @property
409 def family(self):
410 """Read-only access to the address family for this socket.
411 """
412 return _intenum_converter(super().family, AddressFamily)
413
414 @property
415 def type(self):
416 """Read-only access to the socket type.
417 """
418 return _intenum_converter(super().type, SocketType)
419
Victor Stinnerdaf45552013-08-28 00:53:59 +0200420 if os.name == 'nt':
421 def get_inheritable(self):
422 return os.get_handle_inheritable(self.fileno())
423 def set_inheritable(self, inheritable):
424 os.set_handle_inheritable(self.fileno(), inheritable)
425 else:
426 def get_inheritable(self):
427 return os.get_inheritable(self.fileno())
428 def set_inheritable(self, inheritable):
429 os.set_inheritable(self.fileno(), inheritable)
430 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
431 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
432
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000433def fromfd(fd, family, type, proto=0):
434 """ fromfd(fd, family, type[, proto]) -> socket object
435
436 Create a socket object from a duplicate of the given file
437 descriptor. The remaining arguments are the same as for socket().
438 """
439 nfd = dup(fd)
440 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000441
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000442if hasattr(_socket.socket, "share"):
443 def fromshare(info):
444 """ fromshare(info) -> socket object
445
446 Create a socket object from a the bytes object returned by
447 socket.share(pid).
448 """
449 return socket(0, 0, 0, info)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000450
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000451if hasattr(_socket, "socketpair"):
452
453 def socketpair(family=None, type=SOCK_STREAM, proto=0):
454 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
455
456 Create a pair of socket objects from the sockets returned by the platform
457 socketpair() function.
458 The arguments are the same as for socket() except the default family is
459 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
460 """
461 if family is None:
462 try:
463 family = AF_UNIX
464 except NameError:
465 family = AF_INET
466 a, b = _socket.socketpair(family, type, proto)
467 a = socket(family, type, proto, a.detach())
468 b = socket(family, type, proto, b.detach())
469 return a, b
470
471
Antoine Pitrou98b46702010-09-18 22:59:00 +0000472_blocking_errnos = { EAGAIN, EWOULDBLOCK }
473
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000474class SocketIO(io.RawIOBase):
475
476 """Raw I/O implementation for stream sockets.
477
478 This class supports the makefile() method on sockets. It provides
479 the raw I/O interface on top of a socket object.
480 """
481
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000482 # One might wonder why not let FileIO do the job instead. There are two
483 # main reasons why FileIO is not adapted:
484 # - it wouldn't work under Windows (where you can't used read() and
485 # write() on a socket handle)
486 # - it wouldn't work with socket timeouts (FileIO would ignore the
487 # timeout and consider the socket non-blocking)
488
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000489 # XXX More docs
490
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000491 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000492 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000493 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000494 io.RawIOBase.__init__(self)
495 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000496 if "b" not in mode:
497 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000498 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000499 self._reading = "r" in mode
500 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000501 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000502
503 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000504 """Read up to len(b) bytes into the writable buffer *b* and return
505 the number of bytes read. If the socket is non-blocking and no bytes
506 are available, None is returned.
507
508 If *b* is non-empty, a 0 return value indicates that the connection
509 was shutdown at the other end.
510 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000511 self._checkClosed()
512 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000513 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200514 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000515 while True:
516 try:
517 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000518 except timeout:
519 self._timeout_occurred = True
520 raise
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200521 except InterruptedError:
522 continue
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000523 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200524 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000525 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000526 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000527
528 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000529 """Write the given bytes or bytearray object *b* to the socket
530 and return the number of bytes written. This can be less than
531 len(b) if not all data could be written. If the socket is
532 non-blocking and no bytes could be written None is returned.
533 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000534 self._checkClosed()
535 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000536 try:
537 return self._sock.send(b)
538 except error as e:
539 # XXX what about EINTR?
540 if e.args[0] in _blocking_errnos:
541 return None
542 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000543
544 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000545 """True if the SocketIO is open for reading.
546 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200547 if self.closed:
548 raise ValueError("I/O operation on closed socket.")
549 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000550
551 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000552 """True if the SocketIO is open for writing.
553 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200554 if self.closed:
555 raise ValueError("I/O operation on closed socket.")
556 return self._writing
557
558 def seekable(self):
559 """True if the SocketIO is open for seeking.
560 """
561 if self.closed:
562 raise ValueError("I/O operation on closed socket.")
563 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000564
565 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000566 """Return the file descriptor of the underlying socket.
567 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000568 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000569 return self._sock.fileno()
570
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000571 @property
572 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000573 if not self.closed:
574 return self.fileno()
575 else:
576 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000577
578 @property
579 def mode(self):
580 return self._mode
581
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000582 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000583 """Close the SocketIO object. This doesn't close the underlying
584 socket, except if all references to it have disappeared.
585 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000586 if self.closed:
587 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000588 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000589 self._sock._decref_socketios()
590 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000591
Fred Drakea6070f02000-08-16 14:14:32 +0000592
593def getfqdn(name=''):
594 """Get fully qualified domain name from name.
595
596 An empty argument is interpreted as meaning the local host.
597
598 First the hostname returned by gethostbyaddr() is checked, then
599 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000600 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000601 """
602 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000603 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000604 name = gethostname()
605 try:
606 hostname, aliases, ipaddrs = gethostbyaddr(name)
607 except error:
608 pass
609 else:
610 aliases.insert(0, hostname)
611 for name in aliases:
612 if '.' in name:
613 break
614 else:
615 name = hostname
616 return name
617
618
Georg Brandlf78e02b2008-06-10 17:40:04 +0000619_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000620
Gregory P. Smithb4066372010-01-03 03:28:29 +0000621def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
622 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000623 """Connect to *address* and return the socket object.
624
625 Convenience function. Connect to *address* (a 2-tuple ``(host,
626 port)``) and return the socket object. Passing the optional
627 *timeout* parameter will set the timeout on the socket instance
628 before attempting to connect. If no *timeout* is supplied, the
629 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000630 is used. If *source_address* is set it must be a tuple of (host, port)
631 for the socket to bind as a source address before making the connection.
632 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000633 """
634
Guido van Rossumd8faa362007-04-27 19:54:29 +0000635 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000636 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000637 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
638 af, socktype, proto, canonname, sa = res
639 sock = None
640 try:
641 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000642 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000643 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000644 if source_address:
645 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000646 sock.connect(sa)
647 return sock
648
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000649 except error as _:
650 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000651 if sock is not None:
652 sock.close()
653
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000654 if err is not None:
655 raise err
656 else:
657 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700658
659def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
660 """Resolve host and port into list of address info entries.
661
662 Translate the host/port argument into a sequence of 5-tuples that contain
663 all the necessary arguments for creating a socket connected to that service.
664 host is a domain name, a string representation of an IPv4/v6 address or
665 None. port is a string service name such as 'http', a numeric port number or
666 None. By passing None as the value of host and port, you can pass NULL to
667 the underlying C API.
668
669 The family, type and proto arguments can be optionally specified in order to
670 narrow the list of addresses returned. Passing zero as a value for each of
671 these arguments selects the full range of results.
672 """
673 # We override this function since we want to translate the numeric family
674 # and socket type values to enum constants.
675 addrlist = []
676 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
677 af, socktype, proto, canonname, sa = res
678 addrlist.append((_intenum_converter(af, AddressFamily),
679 _intenum_converter(socktype, SocketType),
680 proto, canonname, sa))
681 return addrlist