Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Tracert на winapi()


Автор: LuckLess 31.10.2004, 22:59
ошибка возникает при принятии ICMP сообщения функцией recvfrom() , (error 10022)

int trace(char *input){
//peremenniy i structuri..
int ipadr,sso,frlen=sizeof(struct sockaddr_in);
DWORD ttl=1;
SOCKET ds,rs;
struct WSAData wsainf;
struct sockaddr_in adr,fradr;
char recvbuf[1000];


memset(&adr,0,sizeof(struct sockaddr_in));
memset(&fradr,0,sizeof(struct sockaddr_in));
WSAStartup(MAKEWORD( 2, 2 ), &wsainf);


ipadr=addrrezol(input); //nohozdeniya ip-adresa domena.
if (ipadr==0) {return;} //esli ne naydet - vihod.


//zapolnenie strukturi adresa hosta(sockaddr_in).
adr.sin_family=AF_INET;   //semeystvo ip adresov
adr.sin_port=htons(34343);    //port 34343
adr.sin_addr.s_addr=ipadr;//ip adres.

ds=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
rs=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
if (ds==0){printf("Error creating UDP sokcet");return;}
if (rs==0){printf("Error creating ICMP sokcet");return;}
sso=setsockopt(ds,IPPROTO_IP,IP_TTL,&ttl,sizeof(DWORD));
if(sso==SOCKET_ERROR){printf("Error seting socket options");return;}
if(connect(ds,(struct sockaddr*)&adr,sizeof(adr))==SOCKET_ERROR) {printf("Error connecting socket");return;}
if(send(ds,NULL,NULL,NULL)==SOCKET_ERROR){printf("Error sending on datagram socket");return;}
printf("%d\n",recvfrom(rs,recvbuf,1000,0,(struct sockaddr*)&fradr,&frlen));
printf("%d",WSAGetLastError());
WSACleanup();
return 0;
}


модератору: Не корректно работает тэг [code=] , он вывобит в рамке лишь часть кода..

Автор: shedon 9.11.2004, 10:28
10022 - Получен недопустимый аргумент, посмотри, что передаётся в recvfrom.
ЗЫ
Цитата
модератору: Не корректно работает тэг [code=] , он вывобит в рамке лишь часть кода..

а такого тега нет, есть [code=срр], например.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)