Проблема с инклюдом ip-хедера в винсоке, IP_HDRINCL

Тема в разделе "WASM.NETWORKS", создана пользователем Dude03, 30 апр 2006.

  1. Dude03

    Dude03 New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    48
    Юзаю Winsock 2.2. Вот мой код. Пытаюсь поставить опцию инклюда айпи хедера, однако возвращаеться ошибка 10022=(



    bool bOpt = true;

    if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP)) == SOCKET_ERROR)

    {

    printf("Error create socket!\n");

    return EXIT_FAILURE;

    }

    if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&bOpt, sizeof(bOpt)) == SOCKET_ERROR)

    {

    printf("setsockopt(IP_HDRINCL) failed: %d\n", WSAGetLastError());

    return EXIT_FAILURE;

    }

    помогите , чем могите=)
     
  2. Dude03

    Dude03 New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    48
    Пробовал заменить sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP)

    на

    sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)

    Ничего не помогает...=(
     
  3. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    Попробуй вместо bool bOpt = true написать BOOL bOpt = TRUE. bool и BOOL имеют разный размер. bool занимает 1 байт, BOOL (int) - 4 байта.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Dude03

    IPPROTO_IP Socket Options:
    Код (Text):
    1. Option - IP_HDRINCL
    2. Optval type - DWORD (boolean)


    When set to TRUE, indicates the application provides the IP header. Applies only to SOCK_RAW sockets. The TCP/IP service provider may set the ID field, if the value supplied by the application is zero. The IP_HDRINCL option is applied only to the SOCK_RAW type of protocol. TCP/IP service provider that support SOCK_RAW should also support IP_HDRINCL.