lkml.org 
[lkml]   [2002]   [Feb]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subjectsetsockopt(SOL_SOCKET, SO_SNDBUF) broken on 2.4.18?
    Date
    Hi,

    I run:

    Linux nice 2.4.18-pre7 #1 SMP Mon Jan 28 23:12:48 MET 2002 i686 unknown

    I noticed that whenever I do:

    setsockopt(fd, SOL_SOCKET, SO_SNDBUF....)

    followed by

    getsockopt(fd, SOL_SOCKET, SO_SNDBUF....)

    to verify what the kernel has set, I read TWICE as much the amount used
    for the set. That is, if I set 8192, I read 16384. Therefore, to set
    the correct size, I need to half the parameter first.

    Is this a known bug? Is it setsockopt or getsockopt which returns the
    wrong size?

    Here's sample code demonstrating the problem:

    --------------------------
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>

    static void set_send_buf(int fd, int size)
    {
    int new_len;
    int arglen = sizeof(new_len);

    if (-1 == setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size)))
    perror("setsockopt");

    if (-1 == getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &new_len, &arglen))
    perror("getsockopt");

    printf("size was %d, but set %d\n", size, new_len);
    }

    main()
    {
    int fd = socket(AF_INET, SOCK_STREAM, 0);

    set_send_buf(fd, 8192);
    set_send_buf(fd, 16384);
    }
    --------------------------

    When run, it displays:

    size was 8192, but set 16384
    size was 16384, but set 32768

    Raphael
    -
    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:24    [W:0.023 / U:30.752 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site