/library/diff/socket.rst.diff
diff | 409 lines | 312 code | 97 blank | 0 comment | 0 complexity | c7169594368367d7c2f55c20010ab937 MD5 | raw file
Possible License(s): BSD-3-Clause
- --- r262/library/socket.rst 2009-01-04 06:55:17.853888000 +0900
- +++ r266/library/socket.rst 2010-06-12 18:50:02.725360000 +0900
- @@ -1,13 +1,12 @@
- -
- :mod:`socket` --- Low-level networking interface
- ================================================
-
- .. module:: socket
- :synopsis: Low-level networking interface.
-
-
- This module provides access to the BSD *socket* interface. It is available on
- all modern Unix systems, Windows, Mac OS X, BeOS, OS/2, and probably additional
- platforms.
-
- .. note::
- @@ -64,44 +63,45 @@
- numeric address in *host* portion.
-
- .. versionadded:: 2.5
- AF_NETLINK sockets are represented as pairs ``pid, groups``.
-
- .. versionadded:: 2.6
- Linux-only support for TIPC is also available using the :const:`AF_TIPC`
- address family. TIPC is an open, non-IP based networked protocol designed
- for use in clustered computer environments. Addresses are represented by a
- tuple, and the fields depend on the address type. The general tuple form is
- ``(addr_type, v1, v2, v3 [, scope])``, where:
-
- - - *addr_type* is one of TIPC_ADDR_NAMESEQ, TIPC_ADDR_NAME, or
- - TIPC_ADDR_ID.
- - - *scope* is one of TIPC_ZONE_SCOPE, TIPC_CLUSTER_SCOPE, and
- - TIPC_NODE_SCOPE.
- - - If *addr_type* is TIPC_ADDR_NAME, then *v1* is the server type, *v2* is
- - the port identifier, and *v3* should be 0.
- + - *addr_type* is one of TIPC_ADDR_NAMESEQ, TIPC_ADDR_NAME, or
- + TIPC_ADDR_ID.
- + - *scope* is one of TIPC_ZONE_SCOPE, TIPC_CLUSTER_SCOPE, and
- + TIPC_NODE_SCOPE.
- + - If *addr_type* is TIPC_ADDR_NAME, then *v1* is the server type, *v2* is
- + the port identifier, and *v3* should be 0.
-
- - If *addr_type* is TIPC_ADDR_NAMESEQ, then *v1* is the server type, *v2*
- - is the lower port number, and *v3* is the upper port number.
- + If *addr_type* is TIPC_ADDR_NAMESEQ, then *v1* is the server type, *v2*
- + is the lower port number, and *v3* is the upper port number.
-
- - If *addr_type* is TIPC_ADDR_ID, then *v1* is the node, *v2* is the
- - reference, and *v3* should be set to 0.
- + If *addr_type* is TIPC_ADDR_ID, then *v1* is the node, *v2* is the
- + reference, and *v3* should be set to 0.
-
-
- 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 :exc:`socket.error`.
-
- -Non-blocking mode is supported through :meth:`setblocking`. A generalization of
- -this based on timeouts is supported through :meth:`settimeout`.
- +Non-blocking mode is supported through :meth:`~socket.setblocking`. A
- +generalization of this based on timeouts is supported through
- +:meth:`~socket.settimeout`.
-
- The module :mod:`socket` exports the following constants and functions:
-
-
- .. exception:: error
-
- .. index:: module: errno
-
- This exception is raised for socket-related errors. The accompanying value is
- either a string telling what went wrong or a pair ``(errno, string)``
- representing an error returned by a system call, similar to the value
- accompanying :exc:`os.error`. See the module :mod:`errno`, which contains names
- @@ -207,44 +207,62 @@
-
- .. function:: create_connection(address[, timeout])
-
- Convenience function. Connect to *address* (a 2-tuple ``(host, port)``),
- and return the socket object. Passing the optional *timeout* parameter will
- set the timeout on the socket instance before attempting to connect. If no
- *timeout* is supplied, the global default timeout setting returned by
- :func:`getdefaulttimeout` is used.
-
- .. versionadded:: 2.6
-
-
- -.. function:: getaddrinfo(host, port[, family[, socktype[, proto[, flags]]]])
- +.. function:: getaddrinfo(host, port, family=0, socktype=0, proto=0, flags=0)
-
- - Resolves the *host*/*port* argument, into a sequence of 5-tuples that contain
- - all the necessary arguments for creating the corresponding socket. *host* is a domain
- - name, a string representation of an IPv4/v6 address or ``None``. *port* is a string
- - service name such as ``'http'``, a numeric port number or ``None``.
- - The rest of the arguments are optional and must be numeric if specified.
- - By passing ``None`` as the value of *host* and *port*, , you can pass ``NULL`` to the C API.
- + Translate the *host*/*port* argument into a sequence of 5-tuples that contain
- + all the necessary arguments for creating a socket connected to that service.
- + *host* is a domain name, a string representation of an IPv4/v6 address
- + or ``None``. *port* is a string service name such as ``'http'``, a numeric
- + port number or ``None``. By passing ``None`` as the value of *host*
- + and *port*, you can pass ``NULL`` to the underlying C API.
- +
- + The *family*, *socktype* and *proto* arguments can be optionally specified
- + in order to narrow the list of addresses returned. Passing zero as a
- + value for each of these arguments selects the full range of results.
- + The *flags* argument can be one or several of the ``AI_*`` constants,
- + and will influence how results are computed and returned.
- + For example, :const:`AI_NUMERICHOST` will disable domain name resolution
- + and will raise an error if *host* is a domain name.
-
- - The :func:`getaddrinfo` function returns a list of 5-tuples with the following
- - structure:
- + The function returns a list of 5-tuples with the following structure:
-
- ``(family, socktype, proto, canonname, sockaddr)``
-
- - *family*, *socktype*, *proto* are all integers and are meant to be passed to the
- - :func:`socket` function. *canonname* is a string representing the canonical name
- - of the *host*. It can be a numeric IPv4/v6 address when :const:`AI_CANONNAME` is
- - specified for a numeric *host*. *sockaddr* is a tuple describing a socket
- - address, as described above. See the source for :mod:`socket` and other
- - library modules for a typical usage of the function.
- + In these tuples, *family*, *socktype*, *proto* are all integers and are
- + meant to be passed to the :func:`socket` function. *canonname* will be
- + a string representing the canonical name of the *host* if
- + :const:`AI_CANONNAME` is part of the *flags* argument; else *canonname*
- + will be empty. *sockaddr* is a tuple describing a socket address, whose
- + format depends on the returned *family* (a ``(address, port)`` 2-tuple for
- + :const:`AF_INET`, a ``(address, port, flow info, scope id)`` 4-tuple for
- + :const:`AF_INET6`), and is meant to be passed to the :meth:`socket.connect`
- + method.
- +
- + The following example fetches address information for a hypothetical TCP
- + connection to ``www.python.org`` on port 80 (results may differ on your
- + system if IPv6 isn't enabled)::
- +
- + >>> socket.getaddrinfo("www.python.org", 80, 0, 0, socket.SOL_TCP)
- + [(2, 1, 6, '', ('82.94.164.162', 80)),
- + (10, 1, 6, '', ('2001:888:2000:d::a2', 80, 0, 0))]
-
- .. versionadded:: 2.2
-
-
- .. function:: getfqdn([name])
-
- Return a fully qualified domain name for *name*. If *name* is omitted or empty,
- it is interpreted as the local host. To find the fully qualified name, the
- hostname returned by :func:`gethostbyaddr` is checked, followed by aliases for the
- host, if available. The first name which includes a period is selected. In
- case no fully qualified domain name is available, the hostname as returned by
- :func:`gethostname` is returned.
- @@ -392,43 +410,46 @@
- where the host byte order is the same as network byte order, this is a no-op;
- otherwise, it performs a 2-byte swap operation.
-
-
- .. function:: inet_aton(ip_string)
-
- Convert an IPv4 address from dotted-quad string format (for example,
- '123.45.67.89') to 32-bit packed binary format, as a string four characters in
- length. This is useful when conversing with a program that uses the standard C
- library and needs objects of type :ctype:`struct in_addr`, which is the C type
- for the 32-bit packed binary this function returns.
-
- + :func:`inet_aton` also accepts strings with less than three dots; see the
- + Unix manual page :manpage:`inet(3)` for details.
- +
- If the IPv4 address string passed to this function is invalid,
- :exc:`socket.error` will be raised. Note that exactly what is valid depends on
- the underlying C implementation of :cfunc:`inet_aton`.
-
- - :func:`inet_aton` does not support IPv6, and :func:`getnameinfo` should be used
- + :func:`inet_aton` does not support IPv6, and :func:`inet_pton` should be used
- instead for IPv4/v6 dual stack support.
-
-
- .. function:: inet_ntoa(packed_ip)
-
- Convert a 32-bit packed IPv4 address (a string four characters in length) to its
- standard dotted-quad string representation (for example, '123.45.67.89'). This
- is useful when conversing with a program that uses the standard C library and
- needs objects of type :ctype:`struct in_addr`, which is the C type for the
- 32-bit packed binary data this function takes as an argument.
-
- If the string passed to this function is not exactly 4 bytes in length,
- :exc:`socket.error` will be raised. :func:`inet_ntoa` does not support IPv6, and
- - :func:`getnameinfo` should be used instead for IPv4/v6 dual stack support.
- + :func:`inet_ntop` should be used instead for IPv4/v6 dual stack support.
-
-
- .. function:: inet_pton(address_family, ip_string)
-
- Convert an IP address from its family-specific string format to a packed, binary
- format. :func:`inet_pton` is useful when a library or network protocol calls for
- an object of type :ctype:`struct in_addr` (similar to :func:`inet_aton`) or
- :ctype:`struct in6_addr`.
-
- Supported values for *address_family* are currently :const:`AF_INET` and
- :const:`AF_INET6`. If the IP address string *ip_string* is invalid,
- :exc:`socket.error` will be raised. Note that exactly what is valid depends on
- @@ -585,25 +606,30 @@
- and its integer value is returned by the function. If *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 :mod:`struct` for a way
- to decode C structures encoded as strings).
-
-
- .. method:: socket.ioctl(control, option)
-
- :platform: Windows
-
- The :meth:`ioctl` method is a limited interface to the WSAIoctl system
- - interface. Please refer to the MSDN documentation for more information.
- + interface. Please refer to the `Win32 documentation
- + <http://msdn.microsoft.com/en-us/library/ms741621%28VS.85%29.aspx>`_ for more
- + information.
- +
- + On other platforms, the generic :func:`fcntl.fcntl` and :func:`fcntl.ioctl`
- + functions may be used; they accept a socket object as their first argument.
-
- .. versionadded:: 2.6
-
-
- .. method:: socket.listen(backlog)
-
- Listen for connections made to the socket. The *backlog* argument specifies the
- maximum number of queued connections and should be at least 1; the maximum value
- is system-dependent (usually 5).
-
-
- .. method:: socket.makefile([mode[, bufsize]])
- @@ -647,28 +673,28 @@
- new string. The return value is a pair ``(nbytes, address)`` where *nbytes* is
- the number of bytes received and *address* is the address of the socket sending
- the data. See the Unix manual page :manpage:`recv(2)` for the meaning of the
- optional argument *flags*; it defaults to zero. (The format of *address*
- depends on the address family --- see above.)
-
- .. versionadded:: 2.5
-
-
- .. method:: socket.recv_into(buffer[, nbytes[, flags]])
-
- Receive up to *nbytes* bytes from the socket, storing the data into a buffer
- - rather than creating a new string. If *nbytes* is not specified (or 0),
- - receive up to the size available in the given buffer. See the Unix manual page
- - :manpage:`recv(2)` for the meaning of the optional argument *flags*; it defaults
- - to zero.
- + rather than creating a new string. If *nbytes* is not specified (or 0),
- + receive up to the size available in the given buffer. Returns the number of
- + bytes received. See the Unix manual page :manpage:`recv(2)` for the meaning
- + of the optional argument *flags*; it defaults to zero.
-
- .. versionadded:: 2.5
-
-
- .. method:: socket.send(string[, flags])
-
- Send data to the socket. The socket must be connected to a remote socket. The
- optional *flags* argument has the same meaning as for :meth:`recv` above.
- Returns the number of bytes sent. Applications are responsible for checking that
- all data has been sent; if only some of the data was transmitted, the
- application needs to attempt delivery of the remaining data.
-
- @@ -690,25 +716,25 @@
- argument has the same meaning as for :meth:`recv` above. Return the number of
- bytes sent. (The format of *address* depends on the address family --- see
- above.)
-
-
- .. method:: socket.setblocking(flag)
-
- Set blocking or non-blocking mode of the socket: if *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 :meth:`recv` call doesn't find any
- data, or if a :meth:`send` call can't immediately dispose of the data, a
- :exc:`error` exception is raised; in blocking mode, the calls block until they
- - can proceed. ``s.setblocking(0)`` is equivalent to ``s.settimeout(0)``;
- + can proceed. ``s.setblocking(0)`` is equivalent to ``s.settimeout(0.0)``;
- ``s.setblocking(1)`` is equivalent to ``s.settimeout(None)``.
-
-
- .. method:: socket.settimeout(value)
-
- Set a timeout on blocking socket operations. The *value* argument can be a
- nonnegative float expressing seconds, or ``None``. If a float is given,
- subsequent socket operations will raise an :exc:`timeout` exception if the
- timeout period *value* has elapsed before the operation has completed. Setting
- a timeout of ``None`` disables timeouts on socket operations.
- ``s.settimeout(0.0)`` is equivalent to ``s.setblocking(0)``;
- ``s.settimeout(None)`` is equivalent to ``s.setblocking(1)``.
- @@ -717,64 +743,67 @@
-
-
- .. method:: socket.gettimeout()
-
- Return the timeout in floating seconds associated with socket operations, or
- ``None`` if no timeout is set. This reflects the last call to
- :meth:`setblocking` or :meth:`settimeout`.
-
- .. versionadded:: 2.3
-
- Some notes on socket blocking and timeouts: A socket object can be in one of
- three modes: blocking, non-blocking, or timeout. Sockets are always created in
- -blocking mode. In blocking mode, operations block until complete. In
- +blocking mode. In blocking mode, operations block until complete or
- +the system returns an error (such as connection timed out). In
- non-blocking mode, operations fail (with an error that is unfortunately
- system-dependent) if they cannot be completed immediately. In timeout mode,
- operations fail if they cannot be completed within the timeout specified for the
- -socket. The :meth:`setblocking` method is simply a shorthand for certain
- -:meth:`settimeout` calls.
- +socket or if the system returns an error. The :meth:`~socket.setblocking`
- +method is simply a shorthand for certain :meth:`~socket.settimeout` calls.
-
- Timeout mode internally sets the socket in non-blocking mode. The blocking and
- timeout modes are shared between file descriptors and socket objects that refer
- to the same network endpoint. A consequence of this is that file objects
- -returned by the :meth:`makefile` method must only be used when the socket is in
- -blocking mode; in timeout or non-blocking mode file operations that cannot be
- -completed immediately will fail.
- -
- -Note that the :meth:`connect` operation is subject to the timeout setting, and
- -in general it is recommended to call :meth:`settimeout` before calling
- -:meth:`connect`.
- +returned by the :meth:`~socket.makefile` method must only be used when the
- +socket is in blocking mode; in timeout or non-blocking mode file operations
- +that cannot be completed immediately will fail.
- +
- +Note that the :meth:`~socket.connect` operation is subject to the timeout
- +setting, and in general it is recommended to call :meth:`~socket.settimeout`
- +before calling :meth:`~socket.connect` or pass a timeout parameter to
- +:meth:`create_connection`. The system network stack may return a connection
- +timeout error of its own regardless of any Python socket timeout setting.
-
-
- .. method:: socket.setsockopt(level, optname, value)
-
- .. index:: module: struct
-
- Set the value of the given socket option (see the Unix manual page
- :manpage:`setsockopt(2)`). The needed symbolic constants are defined in the
- :mod:`socket` module (:const:`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 :mod:`struct` for a way to encode C structures as strings).
-
-
- .. method:: socket.shutdown(how)
-
- Shut down one or both halves of the connection. If *how* is :const:`SHUT_RD`,
- further receives are disallowed. If *how* is :const:`SHUT_WR`, further sends
- are disallowed. If *how* is :const:`SHUT_RDWR`, further sends and receives are
- disallowed.
-
- -Note that there are no methods :meth:`read` or :meth:`write`; use :meth:`recv`
- -and :meth:`send` without *flags* argument instead.
- +Note that there are no methods :meth:`read` or :meth:`write`; use
- +:meth:`~socket.recv` and :meth:`~socket.send` without *flags* argument instead.
-
- Socket objects also have these (read-only) attributes that correspond to the
- values given to the :class:`socket` constructor.
-
-
- .. attribute:: socket.family
-
- The socket family.
-
- .. versionadded:: 2.5
-
-
- @@ -791,29 +820,30 @@
-
- .. versionadded:: 2.5
-
-
- .. _socket-example:
-
- Example
- -------
-
- Here are four 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 :func:`socket`,
- -:meth:`bind`, :meth:`listen`, :meth:`accept` (possibly repeating the
- -:meth:`accept` to service more than one client), while a client only needs the
- -sequence :func:`socket`, :meth:`connect`. Also note that the server does not
- -:meth:`send`/:meth:`recv` on the socket it is listening on but on the new
- -socket returned by :meth:`accept`.
- +:meth:`~socket.bind`, :meth:`~socket.listen`, :meth:`~socket.accept` (possibly
- +repeating the :meth:`~socket.accept` to service more than one client), while a
- +client only needs the sequence :func:`socket`, :meth:`~socket.connect`. Also
- +note that the server does not :meth:`~socket.send`/:meth:`~socket.recv` on the
- +socket it is listening on but on the new socket returned by
- +:meth:`~socket.accept`.
-
- The first two examples support IPv4 only. ::
-
- # Echo server program
- import socket
-
- 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()