[Python-Dev] stdlib socket usage and "keepalive"

Guido van Rossum guido at python.org
Tue Apr 13 00:09:43 CEST 2010


Are you sure about this? ISTM that in most cases when a server goes
away unexpectedly the local host will discover this when it next tries
to use the socket. Also I recall reading that keepalives are a very
controversial concept (since they may actually break connections
unnecessarily if the internet merely has a hiccup).

--Guido

On Mon, Apr 12, 2010 at 2:51 PM, Jesus Cea <jcea at jcea.es> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Debugging a strange problem today, I got the following result:
>
> Sockets open by stdlib libraries are open without the "keepalive"
> option, so the system default is used. The system default under linux is
> "no keepalive".
>
> So, if you are using a URLlib connection, POP3 connection, IMAP
> connection, etc., any stdlib that internally creates a socket, and your
> server goes away suddendly (you lose network connectivity, by instance),
> the library will wait FOREVER for the server. The client can't detect
> that the server is not longer available.
>
> The "keepalive" option will send a probe packed every X minutes of
> inactivity, to check if the other side is still alive, even if the
> connection is idle.
>
> The issue is bad, but the solution is simple enough. Options:
>
> 1. All "client" libraries should create sockets with the "KEEPALIVE" option.
>
> 2. Modify the socket C module to create all sockets as "Keepalive" by
> default.
>
> 3. To have a global variable in the socket module to change the default
> for future sockets. Something like current "socket.setdefaulttimeout()".
> The default should be "keepalive".
>
> 4. Modify client libraries to accept a new optional socket-like object
> as an optional parameter. This would allow things like transparent
> compression or encryption, or to replace the socket connection by
> anything else (read/write to shared memory or database, for example).
>
> This is an issue in Linux because by default the sockets are not
> "keepalive". In other Unix systems, the default is "keepalive". I don't
> know about MS Windows.
>
> What do you think?. The solution seems trivial, after deciding the right
> way to go.
>
> PS: "socket.setdefaulttimeout()" is not enough, because it could
> shutdown a perfectly functional connection, just because it was idle for
> too long.
>
> - --
> Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
> jcea at jcea.es - http://www.jcea.es/     _/_/    _/_/  _/_/    _/_/  _/_/
> jabber / xmpp:jcea at jabber.org         _/_/    _/_/          _/_/_/_/_/
> .                              _/_/  _/_/    _/_/          _/_/  _/_/
> "Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
> "My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
> "El amor es poner tu felicidad en la felicidad de otro" - Leibniz
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iQCVAwUBS8OV2Zlgi5GaxT1NAQIJhwP8CH+gij4KfrJ1oHW5ys4PboH5Ru0pgdly
> Wbsza0+uj3p68P1vDnC9jIr7j+fI3ql3DOc8zUoIKGpJoaWVspbv3c4vI4ATLHo+
> J6I18dpkviRT8/sT/69vMvghaGndiO0Sks/S4tDjhNstYH7oGjWxi63cKqtGPY/p
> WSTLpwrd4SY=
> =vkT4
> -----END PGP SIGNATURE-----
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/guido%40python.org
>



-- 
--Guido van Rossum (python.org/~guido)


More information about the Python-Dev mailing list