raw socket
Dan Lukes
dan at obluda.cz
Tue Mar 9 02:22:18 CET 2004
Ondra Holecek wrote:
> mam takovy kus kodu:
> setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &sd, sizeof(sd));
> printf("sockfd: %i, errno: %d\n", sockfd, errno);
> pokud ho prelozim a spustim na fbsd 5.1-REL, dostanu nasledujici vypis
>
> sockfd: 3, errno: 0
Nejprve zacnu hubovanim - takhle to samozrejme delat nelze. setockopt,
jako vetsina ostatnich funkci, vraci navratovou hodnotu, procemz errno
nastavuje JEN TEHDY pokud doslo k chybe. Jinymi slovy, tady ti to
nahodou vychazi - errno je nula. Kdyby ale nebylo - tak to neznamena, ze
doslo k chybe - muze to taky znamenat, ze k chybe nedoslo a tak se
hodnota errno proste nezmenila.
> toaddr.sin_addr.s_addr = inet_addr("192.168.1.1");
> toaddr.sin_port = 0;
> toaddr.sin_family = AF_INET;
Nevidim tady nikde radnou inicializaci one struktury - z uryvku bohuzel
nelze poznat, zda je to staticka promenna (a tedy je naplnena nulou)
nebo zda jde o automatickou promennou (a tedy je jeji inicialni obsah
nedefinovan). Pokud neni promenna inicializovana, mela by nejprve byt -
jinak tam budou nahodne veci. Kazdopadne bych tu jeste nekde cekal
toaddr.sin_len=sizeof(toaddr)
No - a pak muze moci za EINVAL samotny vadny paket - napriklad
nespravna hodnota ip_vhl nebo ip_len - i to je duvod pro invaliditu paketu.
Ktera z techto veci za EINVAL muze (a zda vubec nejaka) je uz vec,
kterou jest treba ozkouseti ...
Dan
More information about the Users-l
mailing list