Re: SO_SNDTIMEO: 2.4 kernel bugs

From: Chris Evans (chris@scary.beasts.org)
Date: Sat Feb 17 2001 - 17:46:19 EST

  • Next message: Michael H. Warfield: "Re: Linux stifles innovation..."

    Hi Alexey,

    This patch fixes my simple read()/write() tests, nice one. The behaviour
    also now matches BSD (someone kindly donated me a FreeBSD shell for
    testing).

    Unfortunately, I discovered a bug with SO_SNDTIMEO/sendfile():

    - Connect an AF_INET, SOCK_STREAM socket to a local listening socket.
    - Set 5 seconds SO_SNDTIMEO on the connected socket
    - Do a sendfile() from a big file down the connected socket. Make sure the
    size is big (e.g. 1Mb) so the call blocks.
    --> BUG!! The call blocks indefinitely rather than being interrupted after
    5 seconds.

    Cheers
    Chris

    On Sat, 17 Feb 2001 kuznet@ms2.inr.ac.ru wrote:

    > Hello!
    >
    > > Unfortunately, it seems to be very buggy. Here are two buggy scenarios.
    >
    >
    > --- ../vger3-010210/linux/net/ipv4/tcp.c Sat Feb 10 23:16:51 2001
    > +++ linux/net/ipv4/tcp.c Sat Feb 17 23:27:43 2001
    > @@ -691,6 +691,8 @@
    >
    > set_current_state(TASK_INTERRUPTIBLE);
    >
    > + if (!timeo)
    > + break;
    > if (signal_pending(current))
    > break;
    > if (tcp_memory_free(sk) && !vm_wait)
    > --- ../vger3-010210/linux/net/core/sock.c Tue Jan 30 21:20:16 2001
    > +++ linux/net/core/sock.c Sat Feb 17 23:27:44 2001
    > @@ -727,6 +727,8 @@
    > clear_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
    > add_wait_queue(sk->sleep, &wait);
    > for (;;) {
    > + if (!timeo)
    > + break;
    > if (signal_pending(current))
    > break;
    > set_bit(SOCK_NOSPACE, &sk->socket->flags);
    >

    -
    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 Feb 17 2001 - 17:47:31 EST