Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: SOCK_RAW: getsockopt(IP_HDRINCL)?  (Прочитано 9587 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DarkK
Гость
« : 04-06-2004 15:21 » 

есть кусок кода:
Код:
if (WSAStartup(MAKEWORD(2,2), &wsadata)) {
perror("WSAStartup");
return 1;
}

fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if (fd == INVALID_SOCKET) {
perror("socket");
return 1;
}

printf("fd: %i\n", fd);

if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, (char*)&on, sizeof(on)) == SOCKET_ERROR) {
printf("setsockopt: WSAGetlasterror: %i\n", WSAGetLastError());
return 1;
}

i = sizeof(on);
if (getsockopt(fd, IPPROTO_IP, IP_HDRINCL, (char*)&on, &i) == SOCKET_ERROR) {
printf("getsockopt: WSAGetlasterror: %i\n", WSAGetLastError()); // !!! вот тут-то он и вылетает
return 1;
}
вылетание - мои кривые руки? перерыл, все что нашел, везде то же самое, но ни у кого не вылетает.... Windows2k-sp3
« Последнее редактирование: 28-11-2007 16:19 от Алексей1153++ » Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 04-06-2004 15:42 » 

Ты с какой библиотекой линкуешься?

См доки: Q257460

Цитата: MSDN
When setting or getting socket options at the IPPROTO_IP level in a C/C++ Winsock application targeted for Windows NT, Windows 2000, Windows 95, or Windows 98, including the correct header and library file in the program project is critical. If the header and library files are not properly matched, setsockopt or getsockopt may fail with runtime error 10042 (WSAENOPROTOOPT). In certain cases, even if the API returns successfully, the option value that you set or get may not be what you would have expected.

To avoid this problem, observe the following guidelines:

A program that includes Winsock.h should only link with Wsock32.lib.


A program that includes Ws2tcpip.h may link with either Ws2_32.lib or Wsock32.lib. Note that Ws2tcpip.h must be explicitly included after Winsock2.h in order to use socket options at this level.


Я попробовал с ws32_2.lib, не работает. C wsock32.lib работает

Хотя совсем не факт, что числовое значение константы, заданное в ws2tcpip.h совпадает с нужным значением, которое используется в библиотеке Улыбаюсь
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Anonymous
Гость
« Ответ #2 : 04-06-2004 17:19 » 

Цитата
Ты с какой библиотекой линкуешься?

ws2_32.lib....
попробую с другой

Цитата
Хотя совсем не факт, что числовое значение константы, заданное в ws2tcpip.h совпадает с нужным значением, которое используется в библиотеке

неужно это предложение ковырять винды дизассемблером? 8-[    ]
Записан
DarkK
Гость
« Ответ #3 : 05-06-2004 20:28 » 

кстати, несмотря на то, что getsockopt падает, setsockopt все правильно устанавливает....
вот и верь после этого документации....
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines