libsocket.tex 25.4 KB
Newer Older
Fred Drake's avatar
Fred Drake committed
1
\section{\module{socket} ---
Fred Drake's avatar
Fred Drake committed
2
         Low-level networking interface}
3

Fred Drake's avatar
Fred Drake committed
4
\declaremodule{builtin}{socket}
5 6
\modulesynopsis{Low-level networking interface.}

Fred Drake's avatar
Fred Drake committed
7

8
This module provides access to the BSD \emph{socket} interface.
9 10
It is available on all modern \UNIX{} systems, Windows, MacOS, BeOS,
OS/2, and probably additional platforms.
11 12

For an introduction to socket programming (in C), see the following
13 14 15 16
papers: \citetitle{An Introductory 4.3BSD Interprocess Communication
Tutorial}, by Stuart Sechrest and \citetitle{An Advanced 4.3BSD
Interprocess Communication Tutorial}, by Samuel J.  Leffler et al,
both in the \citetitle{\UNIX{} Programmer's Manual, Supplementary Documents 1}
17 18 19 20 21
(sections PS1:7 and PS1:8).  The platform-specific reference material
for the various socket-related system calls are also a valuable source
of information on the details of socket semantics.  For \UNIX, refer
to the manual pages; for Windows, see the WinSock (or Winsock 2)
specification.
22 23
For IPv6-ready APIs, readers may want to refer to RFC2553 titled
\cite{Basic Socket Interface Extensions for IPv6}.
24 25 26

The Python interface is a straightforward transliteration of the
\UNIX{} system call and library interface for sockets to Python's
Fred Drake's avatar
Fred Drake committed
27
object-oriented style: the \function{socket()} function returns a
Fred Drake's avatar
Fred Drake committed
28 29 30 31 32 33
\dfn{socket object}\obindex{socket} whose methods implement the
various socket system calls.  Parameter types are somewhat
higher-level than in the C interface: as with \method{read()} and
\method{write()} operations on Python files, buffer allocation on
receive operations is automatic, and buffer length is implicit on send
operations.
34

35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
Socket addresses are represented as follows:
A single string is used for the \constant{AF_UNIX} address family.
A pair \code{(\var{host}, \var{port})} is used for the
\constant{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 IPv4 address like \code{'100.50.200.5'},
and \var{port} is an integral port number.
For \constant{AF_INET6} address family, a four-tuple
\code{(\var{host}, \var{port}, \var{flowinfo}, \var{scopeid})} is
used, where \var{flowinfo} and \var{scopeid} represents
\code{sin6_flowinfo} and \code{sin6_scope_id} member in
\constant{struct sockaddr_in6} in C.
For \module{socket} module methods, \var{flowinfo} and \var{scopeid}
can be omitted just for backward compatibility. Note, however,
omission of \var{scopeid} can cause problems in manipulating scoped
IPv6 addresses. 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 IPv4 addresses, two special forms are accepted instead of a host
Fred Drake's avatar
Fred Drake committed
56
address: the empty string represents \constant{INADDR_ANY}, and the string
Fred Drake's avatar
Fred Drake committed
57
\code{'<broadcast>'} represents \constant{INADDR_BROADCAST}.
58 59 60 61 62 63 64 65 66 67 68
The behavior is not available for IPv6 for backward compatibility,
therefore, you may want to avoid these if you intend to support IPv6 with
your Python programs.

If you use a hostname in the \var{host} portion of IPv4/v6 socket
address, the program may show a nondeterministic behavior, as Python
uses the first address returned from the DNS resolution.  The socket
address will be resolved differently into an actual IPv4/v6 address,
depending on the results from DNS resolution and/or the host
configuration.  For deterministic behavior use a numeric address in
\var{host} portion.
69

70 71
All errors raise exceptions.  The normal exceptions for invalid
argument types and out-of-memory conditions can be raised; errors
Fred Drake's avatar
Fred Drake committed
72 73
related to socket or address semantics raise the error
\exception{socket.error}.
74

Fred Drake's avatar
Fred Drake committed
75 76
Non-blocking mode is supported through the
\method{setblocking()} method.
77

Fred Drake's avatar
Fred Drake committed
78 79
The module \module{socket} exports the following constants and functions:

80 81

\begin{excdesc}{error}
82
This exception is raised for socket-related errors.
83 84 85
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
Fred Drake's avatar
Fred Drake committed
86 87
call, similar to the value accompanying \exception{os.error}.
See the module \refmodule{errno}\refbimodindex{errno}, which contains
88
names for the error codes defined by the underlying operating system.
89 90
\end{excdesc}

91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
\begin{excdesc}{herror}
This exception is raised for address-related errors, i.e. for
functions that use \var{h_errno} in C API, including
\function{gethostbyname_ex} and \function{gethostbyaddr}.

The accompanying value is a pair \code{(\var{h_errno}, \var{string})}
representing an error returned by a library call. \var{string}
represents the description of \var{h_errno}, as returned by
\cfunction{hstrerror} C API. 
\end{excdesc}

\begin{excdesc}{gaierror}
This exception is raised for address-related errors, for
\function{getaddrinfo} and \function{getnameinfo}.
The accompanying value is a pair \code{(\var{error}, \var{string})}
representing an error returned by a library call.
\var{string} represents the description of \var{error}, as returned
by \cfunction{gai_strerror} C API.
\end{excdesc}

111 112
\begin{datadesc}{AF_UNIX}
\dataline{AF_INET}
113
\dataline{AF_INET6}
114
These constants represent the address (and protocol) families,
Fred Drake's avatar
Fred Drake committed
115 116 117
used for the first argument to \function{socket()}.  If the
\constant{AF_UNIX} constant is not defined then this protocol is
unsupported.
118 119 120 121
\end{datadesc}

\begin{datadesc}{SOCK_STREAM}
\dataline{SOCK_DGRAM}
122 123 124
\dataline{SOCK_RAW}
\dataline{SOCK_RDM}
\dataline{SOCK_SEQPACKET}
125
These constants represent the socket types,
Fred Drake's avatar
Fred Drake committed
126 127 128
used for the second argument to \function{socket()}.
(Only \constant{SOCK_STREAM} and
\constant{SOCK_DGRAM} appear to be generally useful.)
129 130
\end{datadesc}

131 132 133 134 135 136 137 138
\begin{datadesc}{SO_*}
\dataline{SOMAXCONN}
\dataline{MSG_*}
\dataline{SOL_*}
\dataline{IPPROTO_*}
\dataline{IPPORT_*}
\dataline{INADDR_*}
\dataline{IP_*}
139 140 141 142
\dataline{IPV6_*}
\dataline{EAI_*}
\dataline{AI_*}
\dataline{NI_*}
143
Many constants of these forms, documented in the \UNIX{} documentation on
144
sockets and/or the IP protocol, are also defined in the socket module.
Fred Drake's avatar
Fred Drake committed
145 146
They are generally used in arguments to the \method{setsockopt()} and
\method{getsockopt()} methods of socket objects.  In most cases, only
147
those symbols that are defined in the \UNIX{} header files are defined;
148 149 150
for a few symbols, default values are provided.
\end{datadesc}

151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
\begin{funcdesc}{getaddrinfo}{host, port\optional{, family, socktype, proto, flags}}

Resolves the \var{host}/\var{port} argument, into a sequence of
5-tuples that contain all the necessary argument for the sockets
manipulation. \var{host} is a domain name, a string representation of
IPv4/v6 address or \code{None}.
\var{port} is a string service name (like \code{``http''}), a numeric
port number or \code{None}.

The rest of the arguments are optional and must be numeric if
specified.  For \var{host} and \var{port}, by passing either an empty
string or \code{None}, you can pass \code{NULL} to the C API.  The
\function{getaddrinfo()} function returns a list of 5-tuples with
the following structure:

\code{(\var{family}, \var{socktype}, \var{proto}, \var{canonname}, \var{sockaddr})}.

\var{family}, \var{socktype}, \var{proto} are all integer and are meant to
be passed to the \function{socket()} function.
\var{canonname} is a string representing the canonical name of the \var{host}.
It can be a numeric IPv4/v6 address when \code{AI_CANONNAME} is specified
for a numeric \var{host}.
\var{sockaddr} is a tuple describing a socket address, as described above.
See \code{Lib/httplib.py} and other library files
for a typical usage of the function.
\versionadded{2.2}
\end{funcdesc}

Fred Drake's avatar
Fred Drake committed
179 180 181 182 183 184 185 186
\begin{funcdesc}{getfqdn}{\optional{name}}
Return a fully qualified domain name for \var{name}.
If \var{name} is omitted or empty, it is interpreted as the local
host.  To find the fully qualified name, the hostname returned by
\function{gethostbyaddr()} is checked, then 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 is
returned.
187
\versionadded{2.0}
Fred Drake's avatar
Fred Drake committed
188 189
\end{funcdesc}

190
\begin{funcdesc}{gethostbyname}{hostname}
191
Translate a host name to IPv4 address format.  The IPv4 address is
192
returned as a string, e.g.,  \code{'100.50.200.5'}.  If the host name
193
is an IPv4 address itself it is returned unchanged.  See
Fred Drake's avatar
Fred Drake committed
194
\function{gethostbyname_ex()} for a more complete interface.
195 196
\function{gethostbyname()} does not support IPv6 name resolution, and
\function{getaddrinfo()} should be used instead for IPv4/v6 dual stack support.
197 198 199
\end{funcdesc}

\begin{funcdesc}{gethostbyname_ex}{hostname}
200
Translate a host name to IPv4 address format, extended interface.
201 202 203 204
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
205
a list of IPv4 addresses for the same interface on the same
206
host (often but not always a single address).
207 208
\function{gethostbyname_ex()} does not support IPv6 name resolution, and
\function{getaddrinfo()} should be used instead for IPv4/v6 dual stack support.
209 210
\end{funcdesc}

211
\begin{funcdesc}{gethostname}{}
212
Return a string containing the hostname of the machine where 
213 214 215 216 217
the Python interpreter is currently executing.
If you want to know the current machine's IP address, you may want to use
\code{gethostbyname(gethostname())}.
This operation assumes that there is a valid address-to-host mapping for
the host, and the assumption does not always hold.
Fred Drake's avatar
Fred Drake committed
218 219
Note: \function{gethostname()} doesn't always return the fully qualified
domain name; use \code{gethostbyaddr(gethostname())}
220
(see below).
221 222 223
\end{funcdesc}

\begin{funcdesc}{gethostbyaddr}{ip_address}
Fred Drake's avatar
Fred Drake committed
224 225 226 227
Return a triple \code{(\var{hostname}, \var{aliaslist},
\var{ipaddrlist})} where \var{hostname} is the primary host name
responding to the given \var{ip_address}, \var{aliaslist} is a
(possibly empty) list of alternative host names for the same address,
228
and \var{ipaddrlist} is a list of IPv4/v6 addresses for the same interface
Fred Drake's avatar
Fred Drake committed
229
on the same host (most likely containing only a single address).
Fred Drake's avatar
Fred Drake committed
230 231
To find the fully qualified domain name, use the function
\function{getfqdn()}.
232 233 234 235 236 237 238 239 240 241 242
\function{gethostbyaddr} supports both IPv4 and IPv6.
\end{funcdesc}

\begin{funcdesc}{getnameinfo}{sockaddr, flags}
Translate a socket address \var{sockaddr} into a 2-tuple
\code{(\var{host}, \var{port})}.
Depending on the settings of \var{flags}, the result can contain a
fully-qualified domain name or numeric address representation in
\var{host}.  Similarly, \var{port} can contain a string port name or a
numeric port number.
\versionadded{2.2}
243 244
\end{funcdesc}

245
\begin{funcdesc}{getprotobyname}{protocolname}
Fred Drake's avatar
Fred Drake committed
246
Translate an Internet protocol name (e.g.\ \code{'icmp'}) to a constant
247
suitable for passing as the (optional) third argument to the
Fred Drake's avatar
Fred Drake committed
248 249 250
\function{socket()} function.  This is usually only needed for sockets
opened in ``raw'' mode (\constant{SOCK_RAW}); for the normal socket
modes, the correct protocol is chosen automatically if the protocol is
251 252 253
omitted or zero.
\end{funcdesc}

Fred Drake's avatar
Fred Drake committed
254
\begin{funcdesc}{getservbyname}{servicename, protocolname}
255 256 257 258 259
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}

Fred Drake's avatar
Fred Drake committed
260
\begin{funcdesc}{socket}{family, type\optional{, proto}}
261
Create a new socket using the given address family, socket type and
262
protocol number.  The address family should be \constant{AF_INET}, \constant{AF_INET6} or
Fred Drake's avatar
Fred Drake committed
263 264
\constant{AF_UNIX}.  The socket type should be \constant{SOCK_STREAM},
\constant{SOCK_DGRAM} or perhaps one of the other \samp{SOCK_} constants.
265 266 267
The protocol number is usually zero and may be omitted in that case.
\end{funcdesc}

Fred Drake's avatar
Fred Drake committed
268
\begin{funcdesc}{fromfd}{fd, family, type\optional{, proto}}
269
Build a socket object from an existing file descriptor (an integer as
Fred Drake's avatar
Fred Drake committed
270
returned by a file object's \method{fileno()} method).  Address family,
Fred Drake's avatar
Fred Drake committed
271
socket type and protocol number are as for the \function{socket()} function
272 273 274 275
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
276
standard input or output (e.g.\ a server started by the \UNIX{} inet
277 278 279
daemon).
\end{funcdesc}

280
\begin{funcdesc}{ntohl}{x}
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301
Convert 32-bit integers from network to host byte order.  On machines
where the host byte order is the same as network byte order, this is a
no-op; otherwise, it performs a 4-byte swap operation.
\end{funcdesc}

\begin{funcdesc}{ntohs}{x}
Convert 16-bit integers from network to host byte order.  On machines
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.
\end{funcdesc}

\begin{funcdesc}{htonl}{x}
Convert 32-bit integers from host to network byte order.  On machines
where the host byte order is the same as network byte order, this is a
no-op; otherwise, it performs a 4-byte swap operation.
\end{funcdesc}

\begin{funcdesc}{htons}{x}
Convert 16-bit integers from host to network byte order.  On machines
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.
302 303
\end{funcdesc}

304
\begin{funcdesc}{inet_aton}{ip_string}
305
Convert an IPv4 address from dotted-quad string format
306 307 308 309 310 311 312
(e.g.\ '123.45.67.89') to 32-bit packed binary format, as a string four
characters in length.

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.

313
If the IPv4 address string passed to this function is invalid,
314 315 316
\exception{socket.error} will be raised. Note that exactly what is
valid depends on the underlying C implementation of
\cfunction{inet_aton()}.
317 318 319

\function{inet_aton} does not support IPv6, and
\function{getnameinfo()} should be used instead for IPv4/v6 dual stack support.
320 321 322
\end{funcdesc}

\begin{funcdesc}{inet_ntoa}{packed_ip}
323
Convert a 32-bit packed IPv4 address (a string four characters in
324 325 326 327 328 329 330 331 332
length) to its standard dotted-quad string representation
(e.g. '123.45.67.89').

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 takes as an argument.

If the string passed to this function is not exactly 4 bytes in
length, \exception{socket.error} will be raised.
333 334 335

\function{inet_ntoa} does not support IPv6, and
\function{getnameinfo()} should be used instead for IPv4/v6 dual stack support.
336 337
\end{funcdesc}

Fred Drake's avatar
Fred Drake committed
338
\begin{datadesc}{SocketType}
339
This is a Python type object that represents the socket object type.
Fred Drake's avatar
Fred Drake committed
340
It is the same as \code{type(socket(...))}.
341 342
\end{datadesc}

343 344 345 346 347 348

\begin{seealso}
  \seemodule{SocketServer}{Classes that simplify writing network servers.}
\end{seealso}


349
\subsection{Socket Objects \label{socket-objects}}
350 351

Socket objects have the following methods.  Except for
Fred Drake's avatar
Fred Drake committed
352 353
\method{makefile()} these correspond to \UNIX{} system calls
applicable to sockets.
354

355
\begin{methoddesc}[socket]{accept}{}
356 357 358 359 360 361
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.
362
\end{methoddesc}
363

364
\begin{methoddesc}[socket]{bind}{address}
365
Bind the socket to \var{address}.  The socket must not already be bound.
366 367 368
(The format of \var{address} depends on the address family --- see
above.)  \strong{Note:}  This method has historically accepted a pair
of parameters for \constant{AF_INET} addresses instead of only a
369 370
tuple.  This was never intentional and is no longer be available in
Python 2.0.
371
\end{methoddesc}
372

373
\begin{methoddesc}[socket]{close}{}
374 375 376
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.
377
\end{methoddesc}
378

379
\begin{methoddesc}[socket]{connect}{address}
380
Connect to a remote socket at \var{address}.
Fred Drake's avatar
Fred Drake committed
381
(The format of \var{address} depends on the address family --- see
382 383
above.)  \strong{Note:}  This method has historically accepted a pair
of parameters for \constant{AF_INET} addresses instead of only a
384 385
tuple.  This was never intentional and is no longer available in
Python 2.0 and later.
386
\end{methoddesc}
387

388
\begin{methoddesc}[socket]{connect_ex}{address}
389
Like \code{connect(\var{address})}, but return an error indicator
390 391 392
instead of raising an exception for errors returned by the C-level
\cfunction{connect()} call (other problems, such as ``host not found,''
can still raise exceptions).  The error indicator is \code{0} if the
Fred Drake's avatar
Fred Drake committed
393
operation succeeded, otherwise the value of the \cdata{errno}
394
variable.  This is useful, e.g., for asynchronous connects.
395 396
\strong{Note:}  This method has historically accepted a pair of
parameters for \constant{AF_INET} addresses instead of only a tuple.
397 398
This was never intentional and is no longer be available in Python
2.0 and later.
399
\end{methoddesc}
400

401
\begin{methoddesc}[socket]{fileno}{}
402
Return the socket's file descriptor (a small integer).  This is useful
Fred Drake's avatar
Fred Drake committed
403
with \function{select.select()}.
404
\end{methoddesc}
405

406
\begin{methoddesc}[socket]{getpeername}{}
407
Return the remote address to which the socket is connected.  This is
408
useful to find out the port number of a remote IPv4/v6 socket, for instance.
409
(The format of the address returned depends on the address family ---
410
see above.)  On some systems this function is not supported.
411
\end{methoddesc}
412

413
\begin{methoddesc}[socket]{getsockname}{}
414
Return the socket's own address.  This is useful to find out the port
415
number of an IPv4/v6 socket, for instance.
416
(The format of the address returned depends on the address family ---
417
see above.)
418
\end{methoddesc}
419

420
\begin{methoddesc}[socket]{getsockopt}{level, optname\optional{, buflen}}
421
Return the value of the given socket option (see the \UNIX{} man page
Fred Drake's avatar
Fred Drake committed
422 423
\manpage{getsockopt}{2}).  The needed symbolic constants
(\constant{SO_*} etc.) are defined in this module.  If \var{buflen}
424
is absent, an integer option is assumed and its integer value
425 426
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
427
this buffer is returned as a string.  It is up to the caller to decode
428
the contents of the buffer (see the optional built-in module
Fred Drake's avatar
Fred Drake committed
429
\refmodule{struct} for a way to decode C structures encoded as strings).
430
\end{methoddesc}
431

432
\begin{methoddesc}[socket]{listen}{backlog}
433 434 435
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).
436
\end{methoddesc}
437

438
\begin{methoddesc}[socket]{makefile}{\optional{mode\optional{, bufsize}}}
439
Return a \dfn{file object} associated with the socket.  (File objects
440
are described in \ref{bltin-file-objects}, ``File Objects.'')
Fred Drake's avatar
Fred Drake committed
441 442
The file object references a \cfunction{dup()}ped version of the
socket file descriptor, so the file object and socket object may be
443 444
closed or garbage-collected independently.
\index{I/O control!buffering}The optional \var{mode}
Fred Drake's avatar
Fred Drake committed
445 446
and \var{bufsize} arguments are interpreted the same way as by the
built-in \function{open()} function.
447
\end{methoddesc}
448

449
\begin{methoddesc}[socket]{recv}{bufsize\optional{, flags}}
450 451 452
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
Fred Drake's avatar
Fred Drake committed
453 454
\manpage{recv}{2} for the meaning of the optional argument
\var{flags}; it defaults to zero.
455
\end{methoddesc}
456

457
\begin{methoddesc}[socket]{recvfrom}{bufsize\optional{, flags}}
458 459 460
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
461
socket sending the data.  The optional \var{flags} argument has the
Fred Drake's avatar
Fred Drake committed
462
same meaning as for \method{recv()} above.
463
(The format of \var{address} depends on the address family --- see above.)
464
\end{methoddesc}
465

466
\begin{methoddesc}[socket]{send}{string\optional{, flags}}
467
Send data to the socket.  The socket must be connected to a remote
468
socket.  The optional \var{flags} argument has the same meaning as for
Fred Drake's avatar
Fred Drake committed
469
\method{recv()} above.  Returns the number of bytes sent.
470
\end{methoddesc}
471

472
\begin{methoddesc}[socket]{sendto}{string\optional{, flags}, address}
473 474
Send data to the socket.  The socket should not be connected to a
remote socket, since the destination socket is specified by
Fred Drake's avatar
Fred Drake committed
475 476
\var{address}.  The optional \var{flags} argument has the same
meaning as for \method{recv()} above.  Return the number of bytes sent.
477
(The format of \var{address} depends on the address family --- see above.)
478
\end{methoddesc}
479

480
\begin{methoddesc}[socket]{setblocking}{flag}
481 482 483
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
Fred Drake's avatar
Fred Drake committed
484 485 486 487
\method{recv()} call doesn't find any data, or if a
\method{send()} call can't immediately dispose of the data, a
\exception{error} exception is raised; in blocking mode, the calls
block until they can proceed.
488
\end{methoddesc}
489

490
\begin{methoddesc}[socket]{setsockopt}{level, optname, value}
491
Set the value of the given socket option (see the \UNIX{} manual page
Fred Drake's avatar
Fred Drake committed
492 493
\manpage{setsockopt}{2}).  The needed symbolic constants are defined in
the \module{socket} module (\code{SO_*} etc.).  The value can be an
494 495 496
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
Fred Drake's avatar
Fred Drake committed
497 498
\refmodule{struct}\refbimodindex{struct} for a way to encode C
structures as strings). 
499
\end{methoddesc}
500

501
\begin{methoddesc}[socket]{shutdown}{how}
Fred Drake's avatar
Fred Drake committed
502 503 504 505
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.
506
\end{methoddesc}
507

Fred Drake's avatar
Fred Drake committed
508 509 510
Note that there are no methods \method{read()} or \method{write()};
use \method{recv()} and \method{send()} without \var{flags} argument
instead.
511

512 513

\subsection{Example \label{socket-example}}
514

515
Here are four minimal example programs using the TCP/IP protocol:\ a
516 517
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
Fred Drake's avatar
Fred Drake committed
518 519 520 521 522
sequence \function{socket()}, \method{bind()}, \method{listen()},
\method{accept()} (possibly repeating the \method{accept()} to service
more than one client), while a client only needs the sequence
\function{socket()}, \method{connect()}.  Also note that the server
does not \method{send()}/\method{recv()} on the 
523
socket it is listening on but on the new socket returned by
Fred Drake's avatar
Fred Drake committed
524
\method{accept()}.
525

526 527
The first two examples support IPv4 only.

528
\begin{verbatim}
529
# Echo server program
530 531
import socket

532
HOST = ''                 # Symbolic name meaning the local host
533 534
PORT = 50007              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
535
s.bind((HOST, PORT))
536
s.listen(1)
537 538 539 540 541 542 543
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.send(data)
conn.close()
544
\end{verbatim}
Fred Drake's avatar
Fred Drake committed
545

546
\begin{verbatim}
547
# Echo client program
548 549
import socket

550 551
HOST = 'daring.cwi.nl'    # The remote host
PORT = 50007              # The same port as used by the server
552
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
553
s.connect((HOST, PORT))
554 555 556 557
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', `data`
558
\end{verbatim}
559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634

The next two examples are identical to the above two, but support both
IPv4 and IPv6.
The server side will listen to the first address family available
(it should listen to both instead).
On most of IPv6-ready systems, IPv6 will take precedence
and the server may not accept IPv4 traffic.
The client side will try to connect to the all addresses returned as a result
of the name resolution, and sends traffic to the first one connected
successfully.

\begin{verbatim}
# Echo server program
import socket
import sys

HOST = ''                 # Symbolic name meaning the local host
PORT = 50007              # Arbitrary non-privileged port
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
    af, socktype, proto, canonname, sa = res
    try:
	s = socket.socket(af, socktype, proto)
    except socket.error, msg:
	s = None
	continue
    try:
	s.bind(sa)
	s.listen(1)
    except socket.error, msg:
	s.close()
	s = None
	continue
    break
if s is None:
    print 'could not open socket'
    sys.exit(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}

\begin{verbatim}
# Echo client program
import socket
import sys

HOST = 'daring.cwi.nl'    # The remote host
PORT = 50007              # The same port as used by the server
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
    af, socktype, proto, canonname, sa = res
    try:
	s = socket.socket(af, socktype, proto)
    except socket.error, msg:
	s = None
	continue
    try:
	s.connect(sa)
    except socket.error, msg:
	s.close()
	s = None
	continue
    break
if s is None:
    print 'could not open socket'
    sys.exit(1)
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', `data`
\end{verbatim}