Clarify the interaction between blocking and timeouts. Explain that

fromfd() assumes a blocking non-timeout socket.
This commit is contained in:
Guido van Rossum 2002-06-07 03:39:21 +00:00
parent e8008f0013
commit fc9823b1a9
1 changed files with 23 additions and 16 deletions

View File

@ -284,7 +284,8 @@ checked --- subsequent operations on the object may fail if the file
descriptor is invalid. This function is rarely needed, but can be 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 used to get or set socket options on a socket passed to a program as
standard input or output (such as a server started by the \UNIX{} inet standard input or output (such as a server started by the \UNIX{} inet
daemon). daemon). The socket is assumed to be created in blocking mode without
a timeout.
Availability: \UNIX. Availability: \UNIX.
\end{funcdesc} \end{funcdesc}
@ -515,29 +516,35 @@ block until they can proceed.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[socket]{settimeout}{value} \begin{methoddesc}[socket]{settimeout}{value}
Set a timeout on blocking socket operations. Value can be any numeric Set a timeout on blocking socket operations. Value can be a
value or \code{None}. Socket operations will raise an nonnegative float expressing seconds, or \code{None}. If a float is
\exception{error} exception if the timeout period \var{value} has give, subsequent socket operations will raise an \exception{error}
elapsed before the operation has completed. Setting a timeout of exception if the timeout period \var{value} has elapsed before the
\code{None} disables timeouts on socket operations. operation has completed. Setting a timeout of \code{None} disables
timeouts on socket operations.
\versionadded{2.3} \versionadded{2.3}
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[socket]{gettimeout}{} \begin{methoddesc}[socket]{gettimeout}{}
Returns the timeout in floating seconds associated with socket Returns the timeout in floating seconds associated with socket
operations. A timeout of \code{None} indicates that timeouts on operations, or \code{None} if no timeout is set.
socket operations are disabled.
\versionadded{2.3} \versionadded{2.3}
\end{methoddesc} \end{methoddesc}
Some notes on the interaction between socket blocking and timeouts: Some notes on the interaction between socket blocking and timeouts: A
socket blocking mode takes precedence over timeouts. If a socket is socket object can be in one of three modes: blocking, non-blocking, or
set to non-blocking mode, then timeouts are not used. timout. Sockets are always created in blocking mode. In blocking
The timeout value associated with the socket can still be set using mode, operations block until complete. In non-blocking mode,
\method{settimeout()} and its value retrieved using operations fail (with an error that is unfortunately system-dependent)
\method{gettimeout()}, but the timeout is never enforced (an exception if they cannot be completed immediately. In timeout mode, operations
will never be thrown). Otherwise, if the socket is in blocking mode, fail if they cannot be completed within the timeout specified for the
setting the timeout will raise an exception as expected. socket.
Calling \method{settimeout()} cancels non-blocking mode as set by
\method{setblocking()}; calling \method{setblocking()} cancels a
previously set timeout. Setting the timeout to zero acts similarly
but is implemented different than setting the socket in non-blocking
mode (this could be considered a bug and may even be fixed).
\begin{methoddesc}[socket]{setsockopt}{level, optname, value} \begin{methoddesc}[socket]{setsockopt}{level, optname, value}
Set the value of the given socket option (see the \UNIX{} manual page Set the value of the given socket option (see the \UNIX{} manual page