lkml.org 
[lkml]   [2003]   [Jun]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: select for UNIX sockets?
    Date
    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/

    \
     
     \ /
      Last update: 2005-03-22 13:36    [W:4.239 / U:0.792 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site