blob: d0350617ae75cbf3d24830eadd9c7e81c7a7f7b8 [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 [*]
15gethostname() -- return the current hostname
16gethostbyname() -- map a hostname to its IP number
17gethostbyaddr() -- map an IP number or hostname to DNS info
18getservbyname() -- map a service name and a protocol name to a port number
Mark Dickinson5c91bf32009-06-02 07:41:26 +000019getprotobyname() -- map a protocol name (e.g. 'tcp') to a number
Fred Drakea6070f02000-08-16 14:14:32 +000020ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order
21htons(), htonl() -- convert 16, 32 bit int from host to network byte order
22inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format
23inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +000024socket.getdefaulttimeout() -- get the default timeout value
25socket.setdefaulttimeout() -- set the default timeout value
Guido van Rossumd8faa362007-04-27 19:54:29 +000026create_connection() -- connects to an address, with an optional timeout
Fred Drakea6070f02000-08-16 14:14:32 +000027
28 [*] not available on all platforms!
29
30Special objects:
31
32SocketType -- type object for socket objects
33error -- exception raised for I/O errors
Guido van Rossum47dfa4a2003-04-25 05:48:32 +000034has_ipv6 -- boolean value indicating if IPv6 is supported
Fred Drakea6070f02000-08-16 14:14:32 +000035
36Integer constants:
37
38AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
39SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
40
41Many other constants may be defined; these may be used in calls to
42the setsockopt() and getsockopt() methods.
43"""
44
Tim Peters18e67782002-02-17 04:25:24 +000045import _socket
Fred Drakea6070f02000-08-16 14:14:32 +000046from _socket import *
Tim Peters18e67782002-02-17 04:25:24 +000047
Guido van Rossum7d0a8262007-05-21 23:13:11 +000048import os, sys, io
Fred Drakea6070f02000-08-16 14:14:32 +000049
Fred Drake70d566b2003-04-29 19:50:25 +000050try:
51 from errno import EBADF
52except ImportError:
53 EBADF = 9
54
Benjamin Petersonef3e4c22009-04-11 19:48:14 +000055__all__ = ["getfqdn", "create_connection"]
Skip Montanaro0de65802001-02-15 22:15:14 +000056__all__.extend(os._get_exports_list(_socket))
Thomas Wouters47b49bf2007-08-30 22:15:33 +000057
58
59_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +000060
Fred Drakea6070f02000-08-16 14:14:32 +000061# WSA error codes
62if sys.platform.lower().startswith("win"):
63 errorTab = {}
64 errorTab[10004] = "The operation was interrupted."
65 errorTab[10009] = "A bad file handle was passed."
66 errorTab[10013] = "Permission denied."
67 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
68 errorTab[10022] = "An invalid operation was attempted."
69 errorTab[10035] = "The socket operation would block"
70 errorTab[10036] = "A blocking operation is already in progress."
71 errorTab[10048] = "The network address is in use."
72 errorTab[10054] = "The connection has been reset."
73 errorTab[10058] = "The network has been shut down."
74 errorTab[10060] = "The operation timed out."
75 errorTab[10061] = "Connection refused."
76 errorTab[10063] = "The name is too long."
77 errorTab[10064] = "The host is down."
78 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +000079 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +000080
Fred Drakea6070f02000-08-16 14:14:32 +000081
Guido van Rossum7d0a8262007-05-21 23:13:11 +000082class socket(_socket.socket):
83
84 """A subclass of _socket.socket adding the makefile() method."""
85
Guido van Rossum86bc33c2007-11-14 22:32:02 +000086 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +000087
Jeremy Hylton5accbdb2007-08-03 20:40:09 +000088 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +000089 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +000090 self._io_refs = 0
91 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +000092
Guido van Rossum7d0a8262007-05-21 23:13:11 +000093 def __repr__(self):
94 """Wrap __repr__() to reveal the real class name."""
95 s = _socket.socket.__repr__(self)
96 if s.startswith("<socket object"):
Guido van Rossum86bc33c2007-11-14 22:32:02 +000097 s = "<%s.%s%s%s" % (self.__class__.__module__,
98 self.__class__.__name__,
99 (self._closed and " [closed] ") or "",
100 s[7:])
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000101 return s
102
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000103 def dup(self):
104 """dup() -> socket object
105
106 Return a new socket object connected to the same system resource.
107 """
108 fd = dup(self.fileno())
109 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
110 sock.settimeout(self.gettimeout())
111 return sock
112
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000113 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000114 """accept() -> (socket object, address info)
115
116 Wait for an incoming connection. Return a new socket
117 representing the connection, and the address of the client.
118 For IP sockets, the address info is a pair (hostaddr, port).
119 """
120 fd, addr = self._accept()
121 return socket(self.family, self.type, self.proto, fileno=fd), addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000122
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000123 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou674f4002010-10-13 16:25:33 +0000124 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000125 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000126
127 The arguments are as for io.open() after the filename,
128 except the only mode characters supported are 'r', 'w' and 'b'.
129 The semantics are similar too. (XXX refactor to share code?)
130 """
131 for c in mode:
132 if c not in {"r", "w", "b"}:
133 raise ValueError("invalid mode %r (only r, w, b allowed)")
134 writing = "w" in mode
135 reading = "r" in mode or not writing
136 assert reading or writing
137 binary = "b" in mode
138 rawmode = ""
139 if reading:
140 rawmode += "r"
141 if writing:
142 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000143 raw = SocketIO(self, rawmode)
144 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000145 if buffering is None:
146 buffering = -1
147 if buffering < 0:
148 buffering = io.DEFAULT_BUFFER_SIZE
149 if buffering == 0:
150 if not binary:
151 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000152 return raw
153 if reading and writing:
154 buffer = io.BufferedRWPair(raw, raw, buffering)
155 elif reading:
156 buffer = io.BufferedReader(raw, buffering)
157 else:
158 assert writing
159 buffer = io.BufferedWriter(raw, buffering)
160 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000161 return buffer
Antoine Pitrou674f4002010-10-13 16:25:33 +0000162 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000163 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000164 return text
165
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000166 def _decref_socketios(self):
167 if self._io_refs > 0:
168 self._io_refs -= 1
169 if self._closed:
170 self.close()
171
Bill Janssen54cc54c2007-12-14 22:08:56 +0000172 def _real_close(self):
173 _socket.socket.close(self)
174
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000175 def close(self):
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000176 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000177 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000178 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000179
180def fromfd(fd, family, type, proto=0):
181 """ fromfd(fd, family, type[, proto]) -> socket object
182
183 Create a socket object from a duplicate of the given file
184 descriptor. The remaining arguments are the same as for socket().
185 """
186 nfd = dup(fd)
187 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000188
189
190class SocketIO(io.RawIOBase):
191
192 """Raw I/O implementation for stream sockets.
193
194 This class supports the makefile() method on sockets. It provides
195 the raw I/O interface on top of a socket object.
196 """
197
Antoine Pitrouecbf2de2010-09-15 11:16:39 +0000198 # One might wonder why not let FileIO do the job instead. There are two
199 # main reasons why FileIO is not adapted:
200 # - it wouldn't work under Windows (where you can't used read() and
201 # write() on a socket handle)
202 # - it wouldn't work with socket timeouts (FileIO would ignore the
203 # timeout and consider the socket non-blocking)
204
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000205 # XXX More docs
206
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000207 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000208 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000209 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000210 io.RawIOBase.__init__(self)
211 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000212 if "b" not in mode:
213 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000214 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000215 self._reading = "r" in mode
216 self._writing = "w" in mode
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000217
218 def readinto(self, b):
Antoine Pitrouecbf2de2010-09-15 11:16:39 +0000219 """Read up to len(b) bytes into the writable buffer *b* and return
220 the number of bytes read. If the socket is non-blocking and no bytes
221 are available, None is returned.
222
223 If *b* is non-empty, a 0 return value indicates that the connection
224 was shutdown at the other end.
225 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000226 self._checkClosed()
227 self._checkReadable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000228 return self._sock.recv_into(b)
229
230 def write(self, b):
Antoine Pitrouecbf2de2010-09-15 11:16:39 +0000231 """Write the given bytes or bytearray object *b* to the socket
232 and return the number of bytes written. This can be less than
233 len(b) if not all data could be written. If the socket is
234 non-blocking and no bytes could be written None is returned.
235 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000236 self._checkClosed()
237 self._checkWritable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000238 return self._sock.send(b)
239
240 def readable(self):
Antoine Pitrouecbf2de2010-09-15 11:16:39 +0000241 """True if the SocketIO is open for reading.
242 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000243 return self._reading and not self.closed
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000244
245 def writable(self):
Antoine Pitrouecbf2de2010-09-15 11:16:39 +0000246 """True if the SocketIO is open for writing.
247 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000248 return self._writing and not self.closed
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000249
250 def fileno(self):
Antoine Pitrouecbf2de2010-09-15 11:16:39 +0000251 """Return the file descriptor of the underlying socket.
252 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000253 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000254 return self._sock.fileno()
255
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000256 @property
257 def name(self):
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000258 return self.fileno()
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000259
260 @property
261 def mode(self):
262 return self._mode
263
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000264 def close(self):
Antoine Pitrouecbf2de2010-09-15 11:16:39 +0000265 """Close the SocketIO object. This doesn't close the underlying
266 socket, except if all references to it have disappeared.
267 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000268 if self.closed:
269 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000270 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000271 self._sock._decref_socketios()
272 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000273
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000274 def __del__(self):
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000275 if not self.closed:
276 self._sock._decref_socketios()
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000277
Fred Drakea6070f02000-08-16 14:14:32 +0000278
279def getfqdn(name=''):
280 """Get fully qualified domain name from name.
281
282 An empty argument is interpreted as meaning the local host.
283
284 First the hostname returned by gethostbyaddr() is checked, then
285 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000286 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000287 """
288 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000289 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000290 name = gethostname()
291 try:
292 hostname, aliases, ipaddrs = gethostbyaddr(name)
293 except error:
294 pass
295 else:
296 aliases.insert(0, hostname)
297 for name in aliases:
298 if '.' in name:
299 break
300 else:
301 name = hostname
302 return name
303
304
Georg Brandlf78e02b2008-06-10 17:40:04 +0000305_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000306
Georg Brandlf78e02b2008-06-10 17:40:04 +0000307def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT):
308 """Connect to *address* and return the socket object.
309
310 Convenience function. Connect to *address* (a 2-tuple ``(host,
311 port)``) and return the socket object. Passing the optional
312 *timeout* parameter will set the timeout on the socket instance
313 before attempting to connect. If no *timeout* is supplied, the
314 global default timeout setting returned by :func:`getdefaulttimeout`
315 is used.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000316 """
317
Guido van Rossumd8faa362007-04-27 19:54:29 +0000318 host, port = address
Antoine Pitrou4d7979b2010-09-07 21:22:56 +0000319 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000320 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
321 af, socktype, proto, canonname, sa = res
322 sock = None
323 try:
324 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000325 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000326 sock.settimeout(timeout)
327 sock.connect(sa)
328 return sock
329
Antoine Pitrou4d7979b2010-09-07 21:22:56 +0000330 except error as _:
331 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000332 if sock is not None:
333 sock.close()
334
Antoine Pitrou4d7979b2010-09-07 21:22:56 +0000335 if err is not None:
336 raise err
337 else:
338 raise error("getaddrinfo returns an empty list")