| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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=срр], например. |