[Python-ideas] PEP 3156: getting the socket or peer name from the transport (original) (raw)

Nikolay Kim fafhrd91 at gmail.com
Thu Jan 24 20:05:40 CET 2013


On Jan 24, 2013, at 10:50 AM, Guido van Rossum <guido at python.org> wrote:

On Thu, Jan 24, 2013 at 10:45 AM, Yuval Greenfield <ubershmekel at gmail.com> wrote:

On Thu, Jan 24, 2013 at 8:23 PM, Guido van Rossum <guido at python.org> wrote:

A pragmatic question popped up: sometimes the protocol would like to know the name of the socket or its peer, i.e. call getsockname() or getpeername() on the underlying socket. (I can imagine wanting to log this, or do some kind of IP address blocking.) What should the interface for this look like? I can think of several ways: A) An API to return the underlying socket, if there is one. (In the case of a stack of transports and protocols there may not be one, so it may return None.) Downside is that it requires the transport to use sockets -- if it were to use some native Windows API there might not be a socket object even though there might be an IP connection with easily-accessible address and peer. I feel (A) is the best option as it's the most flexible - underlying transports can have many different special methods. No? The whole idea of defining a transport API is that the protocol shouldn't care about what type of transport it is being used with. The example of using an http client protocol with a subprocess transport that invokes some kind of tunneling process might clarify this. So I would like the transport API to be both small and fixed, rather than having different transports have different extensions to the standard transport API. What other things might you want to do with the socket besides calling getpeername() or getsockname()? Would that be reasonable to expect from a protocol written to be independent of the specific transport type?

transport could have dictionary attribute where it can store optional information like socket name, peer name or file path, etc.



More information about the Python-ideas mailing list