[Python-Dev] The socket HOWTO

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Mon Jun 6 02:40:35 CEST 2011

On 5 Jun, 10:35 pm, martin at v.loewis.de wrote:
>>First, Twisted doesn't always use the BSD sockets API; the Windows 
>>reactor, especially, starts off with the socket() function, but things
>>go off in a different direction pretty quickly from there.
>Hmm. Are you saying it doesn't use listen, connect, bind, send, recv?
>To me, that's the core of BSD sockets. I can understand it doesn't
>use select(2).

Yes, that's correct.  Those aren't the best APIs to use on Windows, so 
they aren't necessarily used on Windows.
>>So it's
>>perfectly fine to introduce yourself to networking via Twisted, and 
>>users have done just that.  If you're using it idiomatically, you 
>>never encounter a socket object or file descriptor poking through the
>>API anywhere.
>And that's all fine. I still claim that you have to *understand*
>sockets in order to use it properly. By this, I mean stuff like
>"what is a TCP connection? how is it established?", "how is UDP
>different from TCP?", "when data arrives, what layers of software
>does it go through?", "what is a port number?", etc.

These may be good things to understand.  The current socket howto 
doesn't explain them, though.
>>Second, it makes me a little sad that it appears to be folk wisdom 
>>Twisted is only for servers.  A lot of work has gone into making it
>>equally appropriate for clients.  This is especially true if your 
>>has a GUI, where Twisted is often better than a protocol-specific
>>library, which may either be blocking or have its own ad-hoc event 
>I think that's because many of the problems that Twisted solves don't
>exist in many of the client applications - in particular, you often
>don't have many simultaneous connections. GUI apps may be the
>interesting special case, but I expect that people dealing with these
>rather use separate threads.

On the contrary, many of the problems do exist in client applications 
(every time I have to use virt-manager I want to throw it out a window).

Some people certainly would rather use threading, but that doesn't say 
anything about whether Twisted solves problems relevant to clients, only 
about the fact that a lot of people like to use threads.
>>I don't have an opinion on the socket HOWTO per se, only on the
>>possibility of linking to Twisted as an alternate implementation
>>mechanism.  It really would be better to say "go use Twisted rather 
>>reading any of the following" than "read the following, which will 
>>you understand Twisted".
>Wouldn't you agree that Twisted is very difficult to learn, and thus
>much heavier than sockets? And I don't blame the Twisted API for that,
>but rather the mental model of overlapping activities that people have
>severe problems with.

This discussion has a significant problem, in taking "Twisted" as a 
monolithic all-or-nothing entity.  Restricting the scope to merely the 
lowest-level socket replacement APIs - ie, the bare TCP, UDP, etc 
functionality - no, Twisted is not very difficult to learn.  Expanding 
the scope to include the higher level functionality, it is much easier 
to learn than reimplementing line parsing and concurrency and so forth.

However, does that really have anything to do with improving the socket 
howto?  The Python documentation can include a clear explanation of what 
functionality the socket module provides - without forcing you to read 
Stevens _or_ use Twisted, but it can still refer you to both, since it 
is very likely that you'll need at least one of them in addition to the 
socket module.


More information about the Python-Dev mailing list