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