Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создаю ip пакет вручную, проблема с setsockopt [D7, WinXP]


EvgenTss ©   (2003-05-04 14:14:00) 

Следующий код для отсылки своего пакета

if WSAStartUp(257, WSAData) <> 0 then exit;
opt:= Pchar(1);
s := socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if s = INVALID_SOCKET then exit;
opt:= Pchar(1);
if setsockopt(s, IPPROTO_IP, ip_dontfragment , opt, sizeof
(opt)) = SOCKET_ERROR then exit;


addr.sin_family := AF_INET;
addr.sin_port := htons(0);
addr.sin_addr.S_addr:= inet_addr(PChar(ip_dst));

if sendto(s, buf , sizeof(buf), 0, addr , sizeof(addr)) = SOCKET_ERROR then exit;
CloseSocket(s);

setsockopt возвращает SOCKET_ERROR, второй день бьюсь.


EvgenTss   (2003-05-05 11:22:00) [1]

спасибо, всё ок.


nikkie   (2003-05-05 00:34:00) [2]

неправильно 4-5 параметры заполняешь. нужно передавать указатель на integer + sizeof(integer). пример из indy:
Binding.SetSockOpt(Id_IPPROTO_TCP, Id_TCP_NODELAY, PChar(@Id_SO_True), SizeOf(Id_SO_True));


EvgenTss   (2003-05-04 23:27:00) [3]

WSAGetLastError нолик возвращает, такие дела...


nikkie   (2003-05-04 22:37:00) [4]

If no error occurs, setsockopt returns zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.


EvgenTss   (2003-05-04 22:27:00) [5]

Друзья мой, неужели никто не занимался низкоуровневым программированием сокетов? Как-то не верится. Или мой вопрос слишком тривиален?


Serg!   (2003-05-04 18:43:00) [6]

EvgenTss (04.05.03 17:38)
"как можно получть номер ошибки?"

Номер - можнт быть "GetLastError" поможет?


EvgenTss   (2003-05-04 17:38:00) [7]

IP_DONTFRAGMENT - ставит флаг в заголовке ip запрешающий роутерам фрагментировать пакет(winsock.pas), но это не суть, можно менять ip_ttl или ip_tos но функция всё равно возвращает ошибку socket_error. как можно получть номер ошибки?


Zelius   (2003-05-04 16:16:00) [8]

Что такое ip_dontfragment ? В MSDN о нем ничего нету... И потом, посмотри, что за ошибка возвращается и ее описание для SetSockOpt


Наверх

Титульная страница Поиск, карта сайта Написать письмо