blob: 96f8ed0c7f7a4d4457881ea0df2407b1c29b24f0 [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
Guido van Rossum7d0a8262007-05-21 23:13:11 +000050import os, sys, io
Fred Drakea6070f02000-08-16 14:14:32 +000051
Fred Drake70d566b2003-04-29 19:50:25 +000052try:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000053 import errno
Fred Drake70d566b2003-04-29 19:50:25 +000054except ImportError:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000055 errno = None
56EBADF = getattr(errno, 'EBADF', 9)
Antoine Pitrou98b46702010-09-18 22:59:00 +000057EAGAIN = getattr(errno, 'EAGAIN', 11)
58EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11)
Fred Drake70d566b2003-04-29 19:50:25 +000059
Benjamin Petersonef3e4c22009-04-11 19:48:14 +000060__all__ = ["getfqdn", "create_connection"]
Skip Montanaro0de65802001-02-15 22:15:14 +000061__all__.extend(os._get_exports_list(_socket))
Thomas Wouters47b49bf2007-08-30 22:15:33 +000062
63
64_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +000065
Fred Drakea6070f02000-08-16 14:14:32 +000066# WSA error codes
67if sys.platform.lower().startswith("win"):
68 errorTab = {}
69 errorTab[10004] = "The operation was interrupted."
70 errorTab[10009] = "A bad file handle was passed."
71 errorTab[10013] = "Permission denied."
72 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
73 errorTab[10022] = "An invalid operation was attempted."
74 errorTab[10035] = "The socket operation would block"
75 errorTab[10036] = "A blocking operation is already in progress."
76 errorTab[10048] = "The network address is in use."
77 errorTab[10054] = "The connection has been reset."
78 errorTab[10058] = "The network has been shut down."
79 errorTab[10060] = "The operation timed out."
80 errorTab[10061] = "Connection refused."
81 errorTab[10063] = "The name is too long."
82 errorTab[10064] = "The host is down."
83 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +000084 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +000085
Fred Drakea6070f02000-08-16 14:14:32 +000086
Guido van Rossum7d0a8262007-05-21 23:13:11 +000087class socket(_socket.socket):
88
89 """A subclass of _socket.socket adding the makefile() method."""
90
Guido van Rossum86bc33c2007-11-14 22:32:02 +000091 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +000092
Jeremy Hylton5accbdb2007-08-03 20:40:09 +000093 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +000094 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +000095 self._io_refs = 0
96 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +000097
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +000098 def __enter__(self):
99 return self
100
101 def __exit__(self, *args):
102 if not self._closed:
103 self.close()
104
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000105 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200106 """Wrap __repr__() to reveal the real class name and socket
107 address(es).
108 """
109 closed = getattr(self, '_closed', False)
110 s = "<%s.%s%s fd=%i, family=%i, type=%i, proto=%i" \
111 % (self.__class__.__module__,
112 self.__class__.__name__,
113 " [closed]" if closed else "",
114 self.fileno(),
115 self.family,
116 self.type,
117 self.proto)
118 if not closed:
119 try:
120 laddr = self.getsockname()
121 if laddr:
122 s += ", laddr=%s" % str(laddr)
123 except error:
124 pass
125 try:
126 raddr = self.getpeername()
127 if raddr:
128 s += ", raddr=%s" % str(raddr)
129 except error:
130 pass
131 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000132 return s
133
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100134 def __getstate__(self):
135 raise TypeError("Cannot serialize socket object")
136
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000137 def dup(self):
138 """dup() -> socket object
139
140 Return a new socket object connected to the same system resource.
141 """
142 fd = dup(self.fileno())
143 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
144 sock.settimeout(self.gettimeout())
145 return sock
146
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000147 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000148 """accept() -> (socket object, address info)
149
150 Wait for an incoming connection. Return a new socket
151 representing the connection, and the address of the client.
152 For IP sockets, the address info is a pair (hostaddr, port).
153 """
154 fd, addr = self._accept()
Antoine Pitrou600232b2011-01-05 21:03:42 +0000155 sock = socket(self.family, self.type, self.proto, fileno=fd)
156 # Issue #7995: if no default timeout is set and the listening
157 # socket had a (non-zero) timeout, force the new socket in blocking
158 # mode to override platform-specific socket flags inheritance.
159 if getdefaulttimeout() is None and self.gettimeout():
160 sock.setblocking(True)
161 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000162
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000163 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000164 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000165 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000166
167 The arguments are as for io.open() after the filename,
168 except the only mode characters supported are 'r', 'w' and 'b'.
169 The semantics are similar too. (XXX refactor to share code?)
170 """
171 for c in mode:
172 if c not in {"r", "w", "b"}:
173 raise ValueError("invalid mode %r (only r, w, b allowed)")
174 writing = "w" in mode
175 reading = "r" in mode or not writing
176 assert reading or writing
177 binary = "b" in mode
178 rawmode = ""
179 if reading:
180 rawmode += "r"
181 if writing:
182 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000183 raw = SocketIO(self, rawmode)
184 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000185 if buffering is None:
186 buffering = -1
187 if buffering < 0:
188 buffering = io.DEFAULT_BUFFER_SIZE
189 if buffering == 0:
190 if not binary:
191 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000192 return raw
193 if reading and writing:
194 buffer = io.BufferedRWPair(raw, raw, buffering)
195 elif reading:
196 buffer = io.BufferedReader(raw, buffering)
197 else:
198 assert writing
199 buffer = io.BufferedWriter(raw, buffering)
200 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000201 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000202 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000203 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000204 return text
205
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000206 def _decref_socketios(self):
207 if self._io_refs > 0:
208 self._io_refs -= 1
209 if self._closed:
210 self.close()
211
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000212 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000213 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000214 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000215
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000216 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000217 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000218 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000219 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000220 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000221
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200222 def detach(self):
223 """detach() -> file descriptor
224
225 Close the socket object without closing the underlying file descriptor.
226 The object cannot be used after this call, but the file descriptor
227 can be reused for other purposes. The file descriptor is returned.
228 """
229 self._closed = True
230 return super().detach()
231
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000232def fromfd(fd, family, type, proto=0):
233 """ fromfd(fd, family, type[, proto]) -> socket object
234
235 Create a socket object from a duplicate of the given file
236 descriptor. The remaining arguments are the same as for socket().
237 """
238 nfd = dup(fd)
239 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000240
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000241if hasattr(_socket.socket, "share"):
242 def fromshare(info):
243 """ fromshare(info) -> socket object
244
245 Create a socket object from a the bytes object returned by
246 socket.share(pid).
247 """
248 return socket(0, 0, 0, info)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000249
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000250if hasattr(_socket, "socketpair"):
251
252 def socketpair(family=None, type=SOCK_STREAM, proto=0):
253 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
254
255 Create a pair of socket objects from the sockets returned by the platform
256 socketpair() function.
257 The arguments are the same as for socket() except the default family is
258 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
259 """
260 if family is None:
261 try:
262 family = AF_UNIX
263 except NameError:
264 family = AF_INET
265 a, b = _socket.socketpair(family, type, proto)
266 a = socket(family, type, proto, a.detach())
267 b = socket(family, type, proto, b.detach())
268 return a, b
269
270
Antoine Pitrou98b46702010-09-18 22:59:00 +0000271_blocking_errnos = { EAGAIN, EWOULDBLOCK }
272
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000273class SocketIO(io.RawIOBase):
274
275 """Raw I/O implementation for stream sockets.
276
277 This class supports the makefile() method on sockets. It provides
278 the raw I/O interface on top of a socket object.
279 """
280
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000281 # One might wonder why not let FileIO do the job instead. There are two
282 # main reasons why FileIO is not adapted:
283 # - it wouldn't work under Windows (where you can't used read() and
284 # write() on a socket handle)
285 # - it wouldn't work with socket timeouts (FileIO would ignore the
286 # timeout and consider the socket non-blocking)
287
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000288 # XXX More docs
289
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000290 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000291 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000292 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000293 io.RawIOBase.__init__(self)
294 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000295 if "b" not in mode:
296 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000297 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000298 self._reading = "r" in mode
299 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000300 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000301
302 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000303 """Read up to len(b) bytes into the writable buffer *b* and return
304 the number of bytes read. If the socket is non-blocking and no bytes
305 are available, None is returned.
306
307 If *b* is non-empty, a 0 return value indicates that the connection
308 was shutdown at the other end.
309 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000310 self._checkClosed()
311 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000312 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200313 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000314 while True:
315 try:
316 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000317 except timeout:
318 self._timeout_occurred = True
319 raise
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200320 except InterruptedError:
321 continue
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000322 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200323 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000324 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000325 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000326
327 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000328 """Write the given bytes or bytearray object *b* to the socket
329 and return the number of bytes written. This can be less than
330 len(b) if not all data could be written. If the socket is
331 non-blocking and no bytes could be written None is returned.
332 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000333 self._checkClosed()
334 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000335 try:
336 return self._sock.send(b)
337 except error as e:
338 # XXX what about EINTR?
339 if e.args[0] in _blocking_errnos:
340 return None
341 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000342
343 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000344 """True if the SocketIO is open for reading.
345 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200346 if self.closed:
347 raise ValueError("I/O operation on closed socket.")
348 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000349
350 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000351 """True if the SocketIO is open for writing.
352 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200353 if self.closed:
354 raise ValueError("I/O operation on closed socket.")
355 return self._writing
356
357 def seekable(self):
358 """True if the SocketIO is open for seeking.
359 """
360 if self.closed:
361 raise ValueError("I/O operation on closed socket.")
362 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000363
364 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000365 """Return the file descriptor of the underlying socket.
366 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000367 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000368 return self._sock.fileno()
369
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000370 @property
371 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000372 if not self.closed:
373 return self.fileno()
374 else:
375 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000376
377 @property
378 def mode(self):
379 return self._mode
380
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000381 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000382 """Close the SocketIO object. This doesn't close the underlying
383 socket, except if all references to it have disappeared.
384 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000385 if self.closed:
386 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000387 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000388 self._sock._decref_socketios()
389 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000390
Fred Drakea6070f02000-08-16 14:14:32 +0000391
392def getfqdn(name=''):
393 """Get fully qualified domain name from name.
394
395 An empty argument is interpreted as meaning the local host.
396
397 First the hostname returned by gethostbyaddr() is checked, then
398 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000399 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000400 """
401 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000402 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000403 name = gethostname()
404 try:
405 hostname, aliases, ipaddrs = gethostbyaddr(name)
406 except error:
407 pass
408 else:
409 aliases.insert(0, hostname)
410 for name in aliases:
411 if '.' in name:
412 break
413 else:
414 name = hostname
415 return name
416
417
Georg Brandlf78e02b2008-06-10 17:40:04 +0000418_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000419
Gregory P. Smithb4066372010-01-03 03:28:29 +0000420def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
421 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000422 """Connect to *address* and return the socket object.
423
424 Convenience function. Connect to *address* (a 2-tuple ``(host,
425 port)``) and return the socket object. Passing the optional
426 *timeout* parameter will set the timeout on the socket instance
427 before attempting to connect. If no *timeout* is supplied, the
428 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000429 is used. If *source_address* is set it must be a tuple of (host, port)
430 for the socket to bind as a source address before making the connection.
431 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000432 """
433
Guido van Rossumd8faa362007-04-27 19:54:29 +0000434 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000435 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000436 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
437 af, socktype, proto, canonname, sa = res
438 sock = None
439 try:
440 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000441 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000442 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000443 if source_address:
444 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000445 sock.connect(sa)
446 return sock
447
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000448 except error as _:
449 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000450 if sock is not None:
451 sock.close()
452
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000453 if err is not None:
454 raise err
455 else:
456 raise error("getaddrinfo returns an empty list")