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