Robert Buchholz <r...@freitagsrunde.org> added the comment:

An example cannot be constructed using the standard python socket class. As you 
point out, the response.will_close attribute is set correctly: The client is 
supposed to close to connect after completion of the request (as does the 
server). However, when the HTTPConnection object calls close() on the socket, 
reading the request is not completed -- the request object merely created a 
file-like object representing the socket.

The reason why this is not an issue is that the Python socket library does 
reference counting to determine when to close a socket object. When the 
HTTPConnection calls close(), its own socket object is destroyed and 
unreferenced. However, the file-like object in the HTTPResponse still has a 
copy of the socket.

In alternative socket implementations (like Paramiko SOCKS-proxied sockets), 
this poses a problem: When the socket user calls close(), they actually close 
the socket -- as the original socket API documentation describes:

    close()
    Close the socket.  It cannot be used after this call.

    makefile([mode[, bufsize]]) -> file object
    Return a regular file object corresponding to the socket.  The mode
    and bufsize arguments are as for the built-in open() function.

Consequently, I do not consider this to be a bug in Paramiko and reported it 
for the httplib. I can present example code using a paramiko tunneled socket 
(client and server) if you like.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue7806>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to