blob: 6d67b3d2824b7e50260f8c4f5d4ea9e3160dc154 [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
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
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000112class socket(_socket.socket):
113
114 """A subclass of _socket.socket adding the makefile() method."""
115
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000116 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000117
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000118 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700119 # For user code address family and type values are IntEnum members, but
120 # for the underlying _socket.socket they're just integers. The
121 # constructor of _socket.socket converts the given argument to an
122 # integer automatically.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000123 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000124 self._io_refs = 0
125 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000126
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000127 def __enter__(self):
128 return self
129
130 def __exit__(self, *args):
131 if not self._closed:
132 self.close()
133
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000134 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200135 """Wrap __repr__() to reveal the real class name and socket
136 address(es).
137 """
138 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200139 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200140 % (self.__class__.__module__,
141 self.__class__.__name__,
142 " [closed]" if closed else "",
143 self.fileno(),
144 self.family,
145 self.type,
146 self.proto)
147 if not closed:
148 try:
149 laddr = self.getsockname()
150 if laddr:
151 s += ", laddr=%s" % str(laddr)
152 except error:
153 pass
154 try:
155 raddr = self.getpeername()
156 if raddr:
157 s += ", raddr=%s" % str(raddr)
158 except error:
159 pass
160 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000161 return s
162
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100163 def __getstate__(self):
164 raise TypeError("Cannot serialize socket object")
165
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000166 def dup(self):
167 """dup() -> socket object
168
Victor Stinnerdaf45552013-08-28 00:53:59 +0200169 Duplicate the socket. Return a new socket object connected to the same
170 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000171 """
172 fd = dup(self.fileno())
173 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
174 sock.settimeout(self.gettimeout())
175 return sock
176
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000177 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000178 """accept() -> (socket object, address info)
179
180 Wait for an incoming connection. Return a new socket
181 representing the connection, and the address of the client.
182 For IP sockets, the address info is a pair (hostaddr, port).
183 """
184 fd, addr = self._accept()
Antoine Pitrou600232b2011-01-05 21:03:42 +0000185 sock = socket(self.family, self.type, self.proto, fileno=fd)
186 # Issue #7995: if no default timeout is set and the listening
187 # socket had a (non-zero) timeout, force the new socket in blocking
188 # mode to override platform-specific socket flags inheritance.
189 if getdefaulttimeout() is None and self.gettimeout():
190 sock.setblocking(True)
191 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000192
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000193 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000194 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000195 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000196
197 The arguments are as for io.open() after the filename,
198 except the only mode characters supported are 'r', 'w' and 'b'.
199 The semantics are similar too. (XXX refactor to share code?)
200 """
201 for c in mode:
202 if c not in {"r", "w", "b"}:
203 raise ValueError("invalid mode %r (only r, w, b allowed)")
204 writing = "w" in mode
205 reading = "r" in mode or not writing
206 assert reading or writing
207 binary = "b" in mode
208 rawmode = ""
209 if reading:
210 rawmode += "r"
211 if writing:
212 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000213 raw = SocketIO(self, rawmode)
214 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000215 if buffering is None:
216 buffering = -1
217 if buffering < 0:
218 buffering = io.DEFAULT_BUFFER_SIZE
219 if buffering == 0:
220 if not binary:
221 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000222 return raw
223 if reading and writing:
224 buffer = io.BufferedRWPair(raw, raw, buffering)
225 elif reading:
226 buffer = io.BufferedReader(raw, buffering)
227 else:
228 assert writing
229 buffer = io.BufferedWriter(raw, buffering)
230 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000231 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000232 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000233 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000234 return text
235
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000236 def _decref_socketios(self):
237 if self._io_refs > 0:
238 self._io_refs -= 1
239 if self._closed:
240 self.close()
241
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000242 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000243 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000244 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000245
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000246 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000247 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000248 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000249 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000250 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000251
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200252 def detach(self):
253 """detach() -> file descriptor
254
255 Close the socket object without closing the underlying file descriptor.
256 The object cannot be used after this call, but the file descriptor
257 can be reused for other purposes. The file descriptor is returned.
258 """
259 self._closed = True
260 return super().detach()
261
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700262 @property
263 def family(self):
264 """Read-only access to the address family for this socket.
265 """
266 return _intenum_converter(super().family, AddressFamily)
267
268 @property
269 def type(self):
270 """Read-only access to the socket type.
271 """
272 return _intenum_converter(super().type, SocketType)
273
Victor Stinnerdaf45552013-08-28 00:53:59 +0200274 if os.name == 'nt':
275 def get_inheritable(self):
276 return os.get_handle_inheritable(self.fileno())
277 def set_inheritable(self, inheritable):
278 os.set_handle_inheritable(self.fileno(), inheritable)
279 else:
280 def get_inheritable(self):
281 return os.get_inheritable(self.fileno())
282 def set_inheritable(self, inheritable):
283 os.set_inheritable(self.fileno(), inheritable)
284 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
285 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
286
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000287def fromfd(fd, family, type, proto=0):
288 """ fromfd(fd, family, type[, proto]) -> socket object
289
290 Create a socket object from a duplicate of the given file
291 descriptor. The remaining arguments are the same as for socket().
292 """
293 nfd = dup(fd)
294 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000295
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000296if hasattr(_socket.socket, "share"):
297 def fromshare(info):
298 """ fromshare(info) -> socket object
299
300 Create a socket object from a the bytes object returned by
301 socket.share(pid).
302 """
303 return socket(0, 0, 0, info)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000304
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000305if hasattr(_socket, "socketpair"):
306
307 def socketpair(family=None, type=SOCK_STREAM, proto=0):
308 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
309
310 Create a pair of socket objects from the sockets returned by the platform
311 socketpair() function.
312 The arguments are the same as for socket() except the default family is
313 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
314 """
315 if family is None:
316 try:
317 family = AF_UNIX
318 except NameError:
319 family = AF_INET
320 a, b = _socket.socketpair(family, type, proto)
321 a = socket(family, type, proto, a.detach())
322 b = socket(family, type, proto, b.detach())
323 return a, b
324
325
Antoine Pitrou98b46702010-09-18 22:59:00 +0000326_blocking_errnos = { EAGAIN, EWOULDBLOCK }
327
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000328class SocketIO(io.RawIOBase):
329
330 """Raw I/O implementation for stream sockets.
331
332 This class supports the makefile() method on sockets. It provides
333 the raw I/O interface on top of a socket object.
334 """
335
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000336 # One might wonder why not let FileIO do the job instead. There are two
337 # main reasons why FileIO is not adapted:
338 # - it wouldn't work under Windows (where you can't used read() and
339 # write() on a socket handle)
340 # - it wouldn't work with socket timeouts (FileIO would ignore the
341 # timeout and consider the socket non-blocking)
342
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000343 # XXX More docs
344
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000345 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000346 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000347 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000348 io.RawIOBase.__init__(self)
349 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000350 if "b" not in mode:
351 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000352 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000353 self._reading = "r" in mode
354 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000355 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000356
357 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000358 """Read up to len(b) bytes into the writable buffer *b* and return
359 the number of bytes read. If the socket is non-blocking and no bytes
360 are available, None is returned.
361
362 If *b* is non-empty, a 0 return value indicates that the connection
363 was shutdown at the other end.
364 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000365 self._checkClosed()
366 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000367 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200368 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000369 while True:
370 try:
371 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000372 except timeout:
373 self._timeout_occurred = True
374 raise
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200375 except InterruptedError:
376 continue
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000377 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200378 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000379 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000380 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000381
382 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000383 """Write the given bytes or bytearray object *b* to the socket
384 and return the number of bytes written. This can be less than
385 len(b) if not all data could be written. If the socket is
386 non-blocking and no bytes could be written None is returned.
387 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000388 self._checkClosed()
389 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000390 try:
391 return self._sock.send(b)
392 except error as e:
393 # XXX what about EINTR?
394 if e.args[0] in _blocking_errnos:
395 return None
396 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000397
398 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000399 """True if the SocketIO is open for reading.
400 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200401 if self.closed:
402 raise ValueError("I/O operation on closed socket.")
403 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000404
405 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000406 """True if the SocketIO is open for writing.
407 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200408 if self.closed:
409 raise ValueError("I/O operation on closed socket.")
410 return self._writing
411
412 def seekable(self):
413 """True if the SocketIO is open for seeking.
414 """
415 if self.closed:
416 raise ValueError("I/O operation on closed socket.")
417 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000418
419 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000420 """Return the file descriptor of the underlying socket.
421 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000422 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000423 return self._sock.fileno()
424
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000425 @property
426 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000427 if not self.closed:
428 return self.fileno()
429 else:
430 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000431
432 @property
433 def mode(self):
434 return self._mode
435
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000436 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000437 """Close the SocketIO object. This doesn't close the underlying
438 socket, except if all references to it have disappeared.
439 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000440 if self.closed:
441 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000442 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000443 self._sock._decref_socketios()
444 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000445
Fred Drakea6070f02000-08-16 14:14:32 +0000446
447def getfqdn(name=''):
448 """Get fully qualified domain name from name.
449
450 An empty argument is interpreted as meaning the local host.
451
452 First the hostname returned by gethostbyaddr() is checked, then
453 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000454 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000455 """
456 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000457 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000458 name = gethostname()
459 try:
460 hostname, aliases, ipaddrs = gethostbyaddr(name)
461 except error:
462 pass
463 else:
464 aliases.insert(0, hostname)
465 for name in aliases:
466 if '.' in name:
467 break
468 else:
469 name = hostname
470 return name
471
472
Georg Brandlf78e02b2008-06-10 17:40:04 +0000473_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000474
Gregory P. Smithb4066372010-01-03 03:28:29 +0000475def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
476 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000477 """Connect to *address* and return the socket object.
478
479 Convenience function. Connect to *address* (a 2-tuple ``(host,
480 port)``) and return the socket object. Passing the optional
481 *timeout* parameter will set the timeout on the socket instance
482 before attempting to connect. If no *timeout* is supplied, the
483 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000484 is used. If *source_address* is set it must be a tuple of (host, port)
485 for the socket to bind as a source address before making the connection.
486 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000487 """
488
Guido van Rossumd8faa362007-04-27 19:54:29 +0000489 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000490 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000491 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
492 af, socktype, proto, canonname, sa = res
493 sock = None
494 try:
495 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000496 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000497 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000498 if source_address:
499 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000500 sock.connect(sa)
501 return sock
502
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000503 except error as _:
504 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000505 if sock is not None:
506 sock.close()
507
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000508 if err is not None:
509 raise err
510 else:
511 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700512
513def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
514 """Resolve host and port into list of address info entries.
515
516 Translate the host/port argument into a sequence of 5-tuples that contain
517 all the necessary arguments for creating a socket connected to that service.
518 host is a domain name, a string representation of an IPv4/v6 address or
519 None. port is a string service name such as 'http', a numeric port number or
520 None. By passing None as the value of host and port, you can pass NULL to
521 the underlying C API.
522
523 The family, type and proto arguments can be optionally specified in order to
524 narrow the list of addresses returned. Passing zero as a value for each of
525 these arguments selects the full range of results.
526 """
527 # We override this function since we want to translate the numeric family
528 # and socket type values to enum constants.
529 addrlist = []
530 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
531 af, socktype, proto, canonname, sa = res
532 addrlist.append((_intenum_converter(af, AddressFamily),
533 _intenum_converter(socktype, SocketType),
534 proto, canonname, sa))
535 return addrlist