Messages in this thread | | | Date | Fri, 6 Jun 2003 02:38:12 +0200 | From | Petr Vandrovec <> | Subject | Re: select for UNIX sockets? |
| |
On Thu, Jun 05, 2003 at 08:28:46PM -0400, Valdis.Kletnieks@vt.edu wrote: > On Wed, 04 Jun 2003 14:19:34 +0200, Petr Vandrovec said: > > > > > FD_ZERO(&set); > > > > FD_SET(fd, &set); > > > > select(FD_SETSIZE, NULL, &set, NULL, NULL); <<<<<<< for writing > > > > > > > > if (FD_ISSET(fd, &set)) > > > > sendto(fd, &datagram, 1, 0, ...); > > > Besides that select() on unconnected socket is nonsense... If you'll > > change code to do connect(), select(), send(), then it should work, > > unless I missed something. > > We FD_SET the bit, ignore the return value of select, and test if the bit is > still set. Plenty of programming bad karma there. However, one would vaguely > hope that the kernel would notice that the socket isn't connected and -ENOTCONN > rather than blocking....
You'll get ENOTCONN from send, just sendto blocks. select() returns that fd is ready because this end of socket is ready, and there is probably at least one UNIX socket on the system which is ready to accept data - so I think that it is correct that select() returns data ready.
I think that whole problem comes from code's author idea that UNIX datagram sockets are equivalent to UDP through localhost while they are completely different thing. Petr Vandrovec vandrove@vc.cvut.cz
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |