mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			363 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			363 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| \section{Built-in Module \sectcode{socket}}
 | |
| \label{module-socket}
 | |
| 
 | |
| \bimodindex{socket}
 | |
| This module provides access to the BSD {\em socket} interface.
 | |
| It is available on \UNIX{} systems that support this interface.
 | |
| 
 | |
| For an introduction to socket programming (in C), see the following
 | |
| papers: \emph{An Introductory 4.3BSD Interprocess Communication
 | |
| Tutorial}, by Stuart Sechrest and \emph{An Advanced 4.3BSD Interprocess
 | |
| Communication Tutorial}, by Samuel J.  Leffler et al, both in the
 | |
| \UNIX{} Programmer's Manual, Supplementary Documents 1 (sections PS1:7
 | |
| and PS1:8).  The \UNIX{} manual pages for the various socket-related
 | |
| system calls are also a valuable source of information on the details of
 | |
| socket semantics.
 | |
| 
 | |
| The Python interface is a straightforward transliteration of the
 | |
| \UNIX{} system call and library interface for sockets to Python's
 | |
| object-oriented style: the \code{socket()} function returns a
 | |
| \dfn{socket object} whose methods implement the various socket system
 | |
| calls.  Parameter types are somewhat higher-level than in the C
 | |
| interface: as with \code{read()} and \code{write()} operations on Python
 | |
| files, buffer allocation on receive operations is automatic, and
 | |
| buffer length is implicit on send operations.
 | |
| 
 | |
| Socket addresses are represented as a single string for the
 | |
| \code{AF_UNIX} address family and as a pair
 | |
| \code{(\var{host}, \var{port})} for the \code{AF_INET} address family,
 | |
| where \var{host} is a string representing
 | |
| either a hostname in Internet domain notation like
 | |
| \code{'daring.cwi.nl'} or an IP address like \code{'100.50.200.5'},
 | |
| and \var{port} is an integral port number.  Other address families are
 | |
| currently not supported.  The address format required by a particular
 | |
| socket object is automatically selected based on the address family
 | |
| specified when the socket object was created.
 | |
| 
 | |
| For IP addresses, two special forms are accepted instead of a host
 | |
| address: the empty string represents \code{INADDR_ANY}, and the string
 | |
| \code{"<broadcast>"} represents \code{INADDR_BROADCAST}.
 | |
| 
 | |
| All errors raise exceptions.  The normal exceptions for invalid
 | |
| argument types and out-of-memory conditions can be raised; errors
 | |
| related to socket or address semantics raise the error \code{socket.error}.
 | |
| 
 | |
| Non-blocking mode is supported through the \code{setblocking()}
 | |
| method.
 | |
| 
 | |
| The module \code{socket} exports the following constants and functions:
 | |
| 
 | |
| \renewcommand{\indexsubitem}{(in module socket)}
 | |
| \begin{excdesc}{error}
 | |
| This exception is raised for socket- or address-related errors.
 | |
| The accompanying value is either a string telling what went wrong or a
 | |
| pair \code{(\var{errno}, \var{string})}
 | |
| representing an error returned by a system
 | |
| call, similar to the value accompanying \code{posix.error}.
 | |
| \end{excdesc}
 | |
| 
 | |
| \begin{datadesc}{AF_UNIX}
 | |
| \dataline{AF_INET}
 | |
| These constants represent the address (and protocol) families,
 | |
| used for the first argument to \code{socket()}.  If the \code{AF_UNIX}
 | |
| constant is not defined then this protocol is unsupported.
 | |
| \end{datadesc}
 | |
| 
 | |
| \begin{datadesc}{SOCK_STREAM}
 | |
| \dataline{SOCK_DGRAM}
 | |
| \dataline{SOCK_RAW}
 | |
| \dataline{SOCK_RDM}
 | |
| \dataline{SOCK_SEQPACKET}
 | |
| These constants represent the socket types,
 | |
| used for the second argument to \code{socket()}.
 | |
| (Only \code{SOCK_STREAM} and
 | |
| \code{SOCK_DGRAM} appear to be generally useful.)
 | |
| \end{datadesc}
 | |
| 
 | |
| \begin{datadesc}{SO_*}
 | |
| \dataline{SOMAXCONN}
 | |
| \dataline{MSG_*}
 | |
| \dataline{SOL_*}
 | |
| \dataline{IPPROTO_*}
 | |
| \dataline{IPPORT_*}
 | |
| \dataline{INADDR_*}
 | |
| \dataline{IP_*}
 | |
| Many constants of these forms, documented in the \UNIX{} documentation on
 | |
| sockets and/or the IP protocol, are also defined in the socket module.
 | |
| They are generally used in arguments to the \code{setsockopt} and
 | |
| \code{getsockopt} methods of socket objects.  In most cases, only
 | |
| those symbols that are defined in the \UNIX{} header files are defined;
 | |
| for a few symbols, default values are provided.
 | |
| \end{datadesc}
 | |
| 
 | |
| \begin{funcdesc}{gethostbyname}{hostname}
 | |
| Translate a host name to IP address format.  The IP address is
 | |
| returned as a string, e.g.,  \code{'100.50.200.5'}.  If the host name
 | |
| is an IP address itself it is returned unchanged.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{gethostname}{}
 | |
| Return a string containing the hostname of the machine where 
 | |
| the Python interpreter is currently executing.  If you want to know the
 | |
| current machine's IP address, use
 | |
| \code{socket.gethostbyname(socket.gethostname())}.
 | |
| Note: \code{gethostname()} doesn't always return the fully qualified
 | |
| domain name; use \code{socket.gethostbyaddr(socket.gethostname())}
 | |
| (see below).
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{gethostbyaddr}{ip_address}
 | |
| Return a triple \code{(hostname, aliaslist, ipaddrlist)} where
 | |
| \code{hostname} is the primary host name responding to the given
 | |
| \var{ip_address}, \code{aliaslist} is a (possibly empty) list of
 | |
| alternative host names for the same address, and \code{ipaddrlist} is
 | |
| a list of IP addresses for the same interface on the same
 | |
| host (most likely containing only a single address).
 | |
| To find the fully qualified domain name, check \var{hostname} and the
 | |
| items of \var{aliaslist} for an entry containing at least one period.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{getprotobyname}{protocolname}
 | |
| Translate an Internet protocol name (e.g. \code{'icmp'}) to a constant
 | |
| suitable for passing as the (optional) third argument to the
 | |
| \code{socket()} function.  This is usually only needed for sockets
 | |
| opened in ``raw'' mode (\code{SOCK_RAW}); for the normal socket modes,
 | |
| the correct protocol is chosen automatically if the protocol is
 | |
| omitted or zero.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{getservbyname}{servicename\, protocolname}
 | |
| Translate an Internet service name and protocol name to a port number
 | |
| for that service.  The protocol name should be \code{'tcp'} or
 | |
| \code{'udp'}.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{socket}{family\, type\optional{\, proto}}
 | |
| Create a new socket using the given address family, socket type and
 | |
| protocol number.  The address family should be \code{AF_INET} or
 | |
| \code{AF_UNIX}.  The socket type should be \code{SOCK_STREAM},
 | |
| \code{SOCK_DGRAM} or perhaps one of the other \samp{SOCK_} constants.
 | |
| The protocol number is usually zero and may be omitted in that case.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{fromfd}{fd\, family\, type\optional{\, proto}}
 | |
| Build a socket object from an existing file descriptor (an integer as
 | |
| returned by a file object's \code{fileno} method).  Address family,
 | |
| socket type and protocol number are as for the \code{socket} function
 | |
| above.  The file descriptor should refer to a socket, but this is not
 | |
| checked --- subsequent operations on the object may fail if the file
 | |
| descriptor is invalid.  This function is rarely needed, but can be
 | |
| used to get or set socket options on a socket passed to a program as
 | |
| standard input or output (e.g.\ a server started by the \UNIX{} inet
 | |
| daemon).
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{ntohl}{x}
 | |
| \funcline{ntohs}{x}
 | |
| \funcline{htonl}{x}
 | |
| \funcline{htons}{x}
 | |
| These functions convert 32-bit (`l' suffix) and 16-bit (`s' suffix)
 | |
| integers between network and host byte order.  On machines where the
 | |
| host byte order is the same as the network byte order, they are no-ops
 | |
| (assuming the values fit in the indicated size); otherwise, they
 | |
| perform 2-byte or 4-byte swap operations.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{datadesc}{SocketType}
 | |
| This is a Python type object that represents the socket object type.
 | |
| It is the same as \code{type(socket.socket(...))}.
 | |
| \end{datadesc}
 | |
| 
 | |
| \subsection{Socket Objects}
 | |
| 
 | |
| \noindent
 | |
| Socket objects have the following methods.  Except for
 | |
| \code{makefile()} these correspond to \UNIX{} system calls applicable to
 | |
| sockets.
 | |
| 
 | |
| \renewcommand{\indexsubitem}{(socket method)}
 | |
| \begin{funcdesc}{accept}{}
 | |
| Accept a connection.
 | |
| The socket must be bound to an address and listening for connections.
 | |
| The return value is a pair \code{(\var{conn}, \var{address})}
 | |
| where \var{conn} is a \emph{new} socket object usable to send and
 | |
| receive data on the connection, and \var{address} is the address bound
 | |
| to the socket on the other end of the connection.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{bind}{address}
 | |
| Bind the socket to \var{address}.  The socket must not already be bound.
 | |
| (The format of \var{address} depends on the address family --- see above.)
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{close}{}
 | |
| Close the socket.  All future operations on the socket object will fail.
 | |
| The remote end will receive no more data (after queued data is flushed).
 | |
| Sockets are automatically closed when they are garbage-collected.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{connect}{address}
 | |
| Connect to a remote socket at \var{address}.
 | |
| (The format of \var{address} depends on the address family --- see above.)
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{connect_ex}{address}
 | |
| Likecode{connect(\var{address})}, but return an error indicator
 | |
| instead of raising an exception.  The error indicator is 0 if the
 | |
| operation succeeded, otherwise the value of the \code{errno}
 | |
| variable.  This is useful e.g. for asynchronous connects.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{fileno}{}
 | |
| Return the socket's file descriptor (a small integer).  This is useful
 | |
| with \code{select}.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{getpeername}{}
 | |
| Return the remote address to which the socket is connected.  This is
 | |
| useful to find out the port number of a remote IP socket, for instance.
 | |
| (The format of the address returned depends on the address family ---
 | |
| see above.)  On some systems this function is not supported.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{getsockname}{}
 | |
| Return the socket's own address.  This is useful to find out the port
 | |
| number of an IP socket, for instance.
 | |
| (The format of the address returned depends on the address family ---
 | |
| see above.)
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{getsockopt}{level\, optname\optional{\, buflen}}
 | |
| Return the value of the given socket option (see the \UNIX{} man page
 | |
| {\it getsockopt}(2)).  The needed symbolic constants (\code{SO_*} etc.)
 | |
| are defined in this module.  If \var{buflen}
 | |
| is absent, an integer option is assumed and its integer value
 | |
| is returned by the function.  If \var{buflen} is present, it specifies
 | |
| the maximum length of the buffer used to receive the option in, and
 | |
| this buffer is returned as a string.  It is up to the caller to decode
 | |
| the contents of the buffer (see the optional built-in module
 | |
| \code{struct} for a way to decode C structures encoded as strings).
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{listen}{backlog}
 | |
| Listen for connections made to the socket.  The \var{backlog} argument
 | |
| specifies the maximum number of queued connections and should be at
 | |
| least 1; the maximum value is system-dependent (usually 5).
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{makefile}{\optional{mode\optional{\, bufsize}}}
 | |
| Return a \dfn{file object} associated with the socket.  (File objects
 | |
| were described earlier under Built-in Types.)  The file object
 | |
| references a \code{dup()}ped version of the socket file descriptor, so
 | |
| the file object and socket object may be closed or garbage-collected
 | |
| independently.  The optional \var{mode} and \var{bufsize} arguments
 | |
| are interpreted the same way as by the built-in
 | |
| \code{open()} function.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{recv}{bufsize\optional{\, flags}}
 | |
| Receive data from the socket.  The return value is a string representing
 | |
| the data received.  The maximum amount of data to be received
 | |
| at once is specified by \var{bufsize}.  See the \UNIX{} manual page
 | |
| for the meaning of the optional argument \var{flags}; it defaults to
 | |
| zero.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{recvfrom}{bufsize\optional{\, flags}}
 | |
| Receive data from the socket.  The return value is a pair
 | |
| \code{(\var{string}, \var{address})} where \var{string} is a string
 | |
| representing the data received and \var{address} is the address of the
 | |
| socket sending the data.  The optional \var{flags} argument has the
 | |
| same meaning as for \code{recv()} above.
 | |
| (The format of \var{address} depends on the address family --- see above.)
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{send}{string\optional{\, flags}}
 | |
| Send data to the socket.  The socket must be connected to a remote
 | |
| socket.  The optional \var{flags} argument has the same meaning as for
 | |
| \code{recv()} above.  Return the number of bytes sent.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{sendto}{string\optional{\, flags}\, address}
 | |
| Send data to the socket.  The socket should not be connected to a
 | |
| remote socket, since the destination socket is specified by
 | |
| \code{address}.  The optional \var{flags} argument has the same
 | |
| meaning as for \code{recv()} above.  Return the number of bytes sent.
 | |
| (The format of \var{address} depends on the address family --- see above.)
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{setblocking}{flag}
 | |
| Set blocking or non-blocking mode of the socket: if \var{flag} is 0,
 | |
| the socket is set to non-blocking, else to blocking mode.  Initially
 | |
| all sockets are in blocking mode.  In non-blocking mode, if a
 | |
| \code{recv} call doesn't find any data, or if a \code{send} call can't
 | |
| immediately dispose of the data, a \code{socket.error} exception is
 | |
| raised; in blocking mode, the calls block until they can proceed.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{setsockopt}{level\, optname\, value}
 | |
| Set the value of the given socket option (see the \UNIX{} man page
 | |
| {\it setsockopt}(2)).  The needed symbolic constants are defined in
 | |
| the \code{socket} module (\code{SO_*} etc.).  The value can be an
 | |
| integer or a string representing a buffer.  In the latter case it is
 | |
| up to the caller to ensure that the string contains the proper bits
 | |
| (see the optional built-in module
 | |
| \code{struct} for a way to encode C structures as strings).
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{shutdown}{how}
 | |
| Shut down one or both halves of the connection.  If \var{how} is \code{0},
 | |
| further receives are disallowed.  If \var{how} is \code{1}, further sends are
 | |
| disallowed.  If \var{how} is \code{2}, further sends and receives are
 | |
| disallowed.
 | |
| \end{funcdesc}
 | |
| 
 | |
| Note that there are no methods \code{read()} or \code{write()}; use
 | |
| \code{recv()} and \code{send()} without \var{flags} argument instead.
 | |
| 
 | |
| \subsection{Example}
 | |
| \nodename{Socket Example}
 | |
| 
 | |
| Here are two minimal example programs using the TCP/IP protocol:\ a
 | |
| server that echoes all data that it receives back (servicing only one
 | |
| client), and a client using it.  Note that a server must perform the
 | |
| sequence \code{socket}, \code{bind}, \code{listen}, \code{accept}
 | |
| (possibly repeating the \code{accept} to service more than one client),
 | |
| while a client only needs the sequence \code{socket}, \code{connect}.
 | |
| Also note that the server does not \code{send}/\code{receive} on the
 | |
| socket it is listening on but on the new socket returned by
 | |
| \code{accept}.
 | |
| 
 | |
| \bcode\begin{verbatim}
 | |
| # Echo server program
 | |
| from socket import *
 | |
| HOST = ''                 # Symbolic name meaning the local host
 | |
| PORT = 50007              # Arbitrary non-privileged server
 | |
| s = socket(AF_INET, SOCK_STREAM)
 | |
| s.bind(HOST, PORT)
 | |
| s.listen(1)
 | |
| conn, addr = s.accept()
 | |
| print 'Connected by', addr
 | |
| while 1:
 | |
|     data = conn.recv(1024)
 | |
|     if not data: break
 | |
|     conn.send(data)
 | |
| conn.close()
 | |
| \end{verbatim}\ecode
 | |
| %
 | |
| \bcode\begin{verbatim}
 | |
| # Echo client program
 | |
| from socket import *
 | |
| HOST = 'daring.cwi.nl'    # The remote host
 | |
| PORT = 50007              # The same port as used by the server
 | |
| s = socket(AF_INET, SOCK_STREAM)
 | |
| s.connect(HOST, PORT)
 | |
| s.send('Hello, world')
 | |
| data = s.recv(1024)
 | |
| s.close()
 | |
| print 'Received', `data`
 | |
| \end{verbatim}\ecode
 | |
| %
 | |
| \begin{seealso}
 | |
| \seemodule{SocketServer}{classes that simplify writing network servers}
 | |
| \end{seealso}
 | 
