summaryrefslogtreecommitdiffstats
path: root/Doc/lib/libsocket.tex
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2002-06-13 15:07:44 (GMT)
committerGuido van Rossum <guido@python.org>2002-06-13 15:07:44 (GMT)
commit11ba094957ed72d0ecc9e50e79d138a0770df6e3 (patch)
tree029b200e2794fdb9231f42cc77d3120b81ac5c96 /Doc/lib/libsocket.tex
parentdfad1a9039df367c9a403e2b777fe2690f3b5b88 (diff)
downloadcpython-11ba094957ed72d0ecc9e50e79d138a0770df6e3.zip
cpython-11ba094957ed72d0ecc9e50e79d138a0770df6e3.tar.gz
cpython-11ba094957ed72d0ecc9e50e79d138a0770df6e3.tar.bz2
Major overhaul of timeout sockets:
- setblocking(0) and settimeout(0) are now equivalent, and ditto for setblocking(1) and settimeout(None). - Don't raise an exception from internal_select(); let the final call report the error (this means you will get an EAGAIN error instead of an ETIMEDOUT error -- I don't care). - Move the select to inside the Py_{BEGIN,END}_ALLOW_THREADS brackets, so other theads can run (this was a bug in the original code). - Redid the retry logic in connect() and connect_ex() to avoid masking errors. This probably doesn't work for Windows yet; I'll fix that next. It may also fail on other platforms, depending on what retrying a connect does; I need help with this. - Get rid of the retry logic in accept(). I don't think it was needed at all. But I may be wrong.
Diffstat (limited to 'Doc/lib/libsocket.tex')
-rw-r--r--Doc/lib/libsocket.tex43
1 files changed, 22 insertions, 21 deletions
diff --git a/Doc/lib/libsocket.tex b/Doc/lib/libsocket.tex
index 54dfa6c..5ca0afc 100644
--- a/Doc/lib/libsocket.tex
+++ b/Doc/lib/libsocket.tex
@@ -72,8 +72,9 @@ argument types and out-of-memory conditions can be raised; errors
related to socket or address semantics raise the error
\exception{socket.error}.
-Non-blocking mode is supported through the
-\method{setblocking()} method.
+Non-blocking mode is supported through
+\method{setblocking()}. A generalization of this based on timeouts
+is supported through \method{settimeout()}.
The module \module{socket} exports the following constants and functions:
@@ -284,8 +285,7 @@ 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 (such as a server started by the \UNIX{} inet
-daemon). The socket is assumed to be in blocking mode without
-a timeout.
+daemon). The socket is assumed to be in blocking mode.
Availability: \UNIX.
\end{funcdesc}
@@ -514,38 +514,39 @@ all sockets are in blocking mode. In non-blocking mode, 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.
+\code{s.setblocking(0)} is equivalent to \code{s.settimeout(0)};
+\code{s.setblocking(1)} is equivalent to \code{s.settimeout(None)}.
\end{methoddesc}
\begin{methoddesc}[socket]{settimeout}{value}
-Set a timeout on blocking socket operations. Value can be a
-nonnegative float expressing seconds, or \code{None}. If a float is
+Set a timeout on blocking socket operations. The \var{value} argument
+can be a nonnegative float expressing seconds, or \code{None}.
+If a float is
given, subsequent socket operations will raise an \exception{error}
exception if the timeout period \var{value} has elapsed before the
operation has completed. Setting a timeout of \code{None} disables
timeouts on socket operations.
+\code{s.settimeout(0.0)} is equivalent to \code{s.blocking(0)};
+\code{s.settimeout(None)} is equivalent to \code{s.setblocking(1)}.
\versionadded{2.3}
\end{methoddesc}
\begin{methoddesc}[socket]{gettimeout}{}
Returns the timeout in floating seconds associated with socket
-operations, or \code{None} if no timeout is set.
+operations, or \code{None} if no timeout is set. This reflects
+the last call to \method{setblocking()} or \method{settimeout()}.
\versionadded{2.3}
\end{methoddesc}
-Some notes on the interaction between socket blocking and timeouts: A
-socket object can be in one of three modes: blocking, non-blocking, or
-timout. Sockets are always created in blocking mode. In blocking
-mode, operations block until complete. 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.
-
-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).
+Some notes on socket blocking and timeouts: A socket object can be in
+one of three modes: blocking, non-blocking, or timout. Sockets are
+always created in blocking mode. In blocking mode, operations block
+until complete. 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
+\method{setblocking()} method is simply a shorthand for certain
+\method{settimeout()} calls.
Timeout mode internally sets the socket in non-blocking mode. The
blocking and timeout modes are shared between file descriptors and