Issue #24911: Merge socket context manager doc from 3.5
This commit is contained in:
commit
a497774b71
|
@ -445,9 +445,6 @@ The following functions all create :ref:`socket objects <socket-objects>`.
|
|||
.. versionchanged:: 3.2
|
||||
*source_address* was added.
|
||||
|
||||
.. versionchanged:: 3.2
|
||||
support for the :keyword:`with` statement was added.
|
||||
|
||||
|
||||
.. function:: fromfd(fd, family, type, proto=0)
|
||||
|
||||
|
@ -831,6 +828,10 @@ Socket objects have the following methods. Except for
|
|||
:meth:`~socket.makefile`, these correspond to Unix system calls applicable
|
||||
to sockets.
|
||||
|
||||
.. versionchanged:: 3.2
|
||||
Support for the :term:`context manager` protocol was added. Exiting the
|
||||
context manager is equivalent to calling :meth:`~socket.close`.
|
||||
|
||||
|
||||
.. method:: socket.accept()
|
||||
|
||||
|
@ -1461,16 +1462,16 @@ The first two examples support IPv4 only. ::
|
|||
|
||||
HOST = '' # Symbolic name meaning all available interfaces
|
||||
PORT = 50007 # Arbitrary non-privileged port
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.bind((HOST, PORT))
|
||||
s.listen(1)
|
||||
conn, addr = s.accept()
|
||||
print('Connected by', addr)
|
||||
while True:
|
||||
data = conn.recv(1024)
|
||||
if not data: break
|
||||
conn.sendall(data)
|
||||
conn.close()
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
s.bind((HOST, PORT))
|
||||
s.listen(1)
|
||||
conn, addr = s.accept()
|
||||
with conn:
|
||||
print('Connected by', addr)
|
||||
while True:
|
||||
data = conn.recv(1024)
|
||||
if not data: break
|
||||
conn.sendall(data)
|
||||
|
||||
::
|
||||
|
||||
|
@ -1479,11 +1480,10 @@ The first two examples support IPv4 only. ::
|
|||
|
||||
HOST = 'daring.cwi.nl' # The remote host
|
||||
PORT = 50007 # The same port as used by the server
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.connect((HOST, PORT))
|
||||
s.sendall(b'Hello, world')
|
||||
data = s.recv(1024)
|
||||
s.close()
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
s.connect((HOST, PORT))
|
||||
s.sendall(b'Hello, world')
|
||||
data = s.recv(1024)
|
||||
print('Received', repr(data))
|
||||
|
||||
The next two examples are identical to the above two, but support both IPv4 and
|
||||
|
@ -1520,12 +1520,12 @@ sends traffic to the first one connected successfully. ::
|
|||
print('could not open socket')
|
||||
sys.exit(1)
|
||||
conn, addr = s.accept()
|
||||
print('Connected by', addr)
|
||||
while True:
|
||||
data = conn.recv(1024)
|
||||
if not data: break
|
||||
conn.send(data)
|
||||
conn.close()
|
||||
with conn:
|
||||
print('Connected by', addr)
|
||||
while True:
|
||||
data = conn.recv(1024)
|
||||
if not data: break
|
||||
conn.send(data)
|
||||
|
||||
::
|
||||
|
||||
|
@ -1553,9 +1553,9 @@ sends traffic to the first one connected successfully. ::
|
|||
if s is None:
|
||||
print('could not open socket')
|
||||
sys.exit(1)
|
||||
s.sendall(b'Hello, world')
|
||||
data = s.recv(1024)
|
||||
s.close()
|
||||
with s:
|
||||
s.sendall(b'Hello, world')
|
||||
data = s.recv(1024)
|
||||
print('Received', repr(data))
|
||||
|
||||
|
||||
|
|
|
@ -474,17 +474,13 @@ This is the client side::
|
|||
data = " ".join(sys.argv[1:])
|
||||
|
||||
# Create a socket (SOCK_STREAM means a TCP socket)
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
|
||||
try:
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
||||
# Connect to server and send data
|
||||
sock.connect((HOST, PORT))
|
||||
sock.sendall(bytes(data + "\n", "utf-8"))
|
||||
|
||||
# Receive data from the server and shut down
|
||||
received = str(sock.recv(1024), "utf-8")
|
||||
finally:
|
||||
sock.close()
|
||||
|
||||
print("Sent: {}".format(data))
|
||||
print("Received: {}".format(received))
|
||||
|
@ -583,14 +579,11 @@ An example for the :class:`ThreadingMixIn` class::
|
|||
pass
|
||||
|
||||
def client(ip, port, message):
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.connect((ip, port))
|
||||
try:
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
||||
sock.connect((ip, port))
|
||||
sock.sendall(bytes(message, 'ascii'))
|
||||
response = str(sock.recv(1024), 'ascii')
|
||||
print("Received: {}".format(response))
|
||||
finally:
|
||||
sock.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Port 0 means to select an arbitrary unused port
|
||||
|
|
Loading…
Reference in New Issue