<div dir="auto"><div><div class="gmail_extra"><div class="gmail_quote">On Jan 9, 2018 04:12, "Random832" <<a href="mailto:random832@fastmail.com">random832@fastmail.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text">On Tue, Jan 9, 2018, at 05:46, Nick Coghlan wrote:<br>
> If you view them as comparable to subprocess pipes, then it can be<br>
> surprising that they're not iterable when using a line-oriented<br>
> protocol.<br>
><br>
> If you instead view them as comparable to socket connections, then the<br>
> lack of iteration support seems equally reasonable.<br>
<br>
</div>Sockets are files - there's no fundamental reason a stream socket using a line-oriented protocol (which is a common enough case), or a datagram socket, shouldn't be iterable. Why aren't they?</blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">Supporting line iteration on sockets would require adding a whole buffering layer, which would be a huge change in semantics. Also, due to the way the BSD socket API works, stream and datagram sockets are the same Python type, so which one would socket.__next__ assume? (Plus datagrams are a bit messy anyway; you need to know the protocol's max size before you can call recv.)</div><div dir="auto"><br></div><div dir="auto">I know this was maybe a rhetorical question, but this particular case does have an answer beyond "we never did it that way before" :-).</div><div dir="auto"><br></div><div dir="auto">-n</div></div>