Re: select for UNIX sockets?

From: Jesse Pollard (jesse@cats-chateau.net)
Date: Wed Jun 04 2003 - 06:55:47 EST


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/



This archive was generated by hypermail 2b29 : Sat Jun 07 2003 - 22:00:23 EST