raw socket

Ondra Holecek bln at bln.no-ip.org
Mon Mar 8 23:44:18 CET 2004


Ahoj

mam takovy kus kodu:

	int sockfd, sd;
	struct sockaddr_in toaddr;

	sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_RAW);

	sd = 1;
	setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &sd, sizeof(sd));
	printf("sockfd: %i, errno: %d\n", sockfd, errno);

	toaddr.sin_addr.s_addr = inet_addr("192.168.1.1");
	toaddr.sin_port = 0;
	toaddr.sin_family = AF_INET;

	sd = sendto(sockfd, packet, delka, 0, (struct sockaddr *)&toaddr, 
sizeof(struct sockaddr));
	printf(": %d, delka: %d, errno: %d\n", sd, delka, errno);
	close(sockfd);

pokud ho prelozim a spustim na fbsd 5.1-REL, dostanu nasledujici vypis

sockfd: 3, errno: 0
: -1, delka: 40, errno: 22

tj, ze vytvoril raw socket a nastavil mu ze chci posilat vlastni IP hlavicky i 
TCP atd.  Problem ale je ze uz to nechce poslat error 22 znamena EINVAL /
Invalid argument/. Ale vyzkousel jsem to prelozit a spustit na linuxu a tam 
to funguje bez problemu. V cem je teda chyba?




More information about the Users-l mailing list