mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	Issue #24911: Merge socket context manager doc from 3.5
This commit is contained in:
		
						commit
						a497774b71
					
				
					 2 changed files with 30 additions and 37 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
   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)
 | 
			
		||||
   conn.close()
 | 
			
		||||
 | 
			
		||||
::
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
   with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
 | 
			
		||||
       s.connect((HOST, PORT))
 | 
			
		||||
       s.sendall(b'Hello, world')
 | 
			
		||||
       data = s.recv(1024)
 | 
			
		||||
   s.close()
 | 
			
		||||
   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()
 | 
			
		||||
   with conn:
 | 
			
		||||
       print('Connected by', addr)
 | 
			
		||||
       while True:
 | 
			
		||||
           data = conn.recv(1024)
 | 
			
		||||
           if not data: break
 | 
			
		||||
           conn.send(data)
 | 
			
		||||
   conn.close()
 | 
			
		||||
 | 
			
		||||
::
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1553,9 +1553,9 @@ sends traffic to the first one connected successfully. ::
 | 
			
		|||
   if s is None:
 | 
			
		||||
       print('could not open socket')
 | 
			
		||||
       sys.exit(1)
 | 
			
		||||
   with s:
 | 
			
		||||
       s.sendall(b'Hello, world')
 | 
			
		||||
       data = s.recv(1024)
 | 
			
		||||
   s.close()
 | 
			
		||||
   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)
 | 
			
		||||
       with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
 | 
			
		||||
           sock.connect((ip, port))
 | 
			
		||||
       try:
 | 
			
		||||
           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…
	
	Add table
		Add a link
		
	
		Reference in a new issue