Hi Herbert.
Herbert Xu wrote:
sendto(). SOCK_RAW code, in comparison, allows write() after bind().It is counter-intuitive to allow write after bind(). AFAIK RAW only allows write after connect(), not bind().
I claim that SOCK_RAW allows write() after bind() because a few days ago I changed dosemu code to use SOCK_RAW instead of SOCK_PACKET and write() instead of sendto(). See here: http://cvs.sourceforge.net/viewcvs.py/dosemu/dosemu/src/dosext/net/net/libpacket.c?r1=1.4&r2=1.5&diff_format=u http://cvs.sourceforge.net/viewcvs.py/dosemu/dosemu/src/dosext/net/net/pktnew.c?r1=1.7&r2=1.8&diff_format=u Of course the fact that I did that for dosemu, doesn't mean that I was doing the right thing (so if you know it is wrong - I'll redo it) but at least it was tested and works. And since that works for SOCK_RAW, I don't see any reasons for it to not work for SOCK_PACKET. And btw, I can use read() quite happily even with SOCK_PACKET, so why not write()... My patch is simply an adoption of the code SOCK_RAW has. See af_packet.c:packet_sendmsg(), you'll see under "if (saddr == NULL)" just the same code as I was doing for SOCK_PACKET.
- : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html