Messages in this thread | | | From | Jesse Pollard <> | Subject | Re: select for UNIX sockets? | Date | Wed, 4 Jun 2003 06:55:47 -0500 |
| |
On Monday 02 June 2003 19:08, Krzysztof Halasa wrote: > Hi, > > Should something like this work correctly? > > while(1) { > 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, ...); > } > > fd is a normal local datagram socket. It looks select() returns with > "fd ready for write" and sendto() then blocks as the queue is full. > > I don't know if it's expected behaviour or just a not yet known bug. > Of course, I have a more complete test program if needed. > > 2.4.21rc6, haven't tried any other version. > > strace shows: > > select(1024, NULL, [3], NULL, NULL) = 1 (out [3]) > sendto(3, "\0", 1, 0, {sa_family=AF_UNIX, path="/tmp/tempUn"}, 13 <<< > blocks
Could. There may be room for the buffer, but unless it is set to nonblock, you may have a stream open to another host that may not accept the data (busy, network congestion...) With the required acks, the return may (should?) be delayed until the ack arrives. - 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/
| |