发送自己的ip包数据出错
初始化socket函数段:
sendsock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = SELF_PORT;
server.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sendsock,(struct sockaddr *)&server,sizeof(server))!=0)
{
perror("binding stream socket");
exit(1);
}
ret = setsockopt(sendsock,IPPROTO_IP, IP_HDRINCL,(char *)&on,sizeof(on));
if(ret != 0)
{
errcode = WSAGetLastError();
exit(0);
}
这样初始化socket之后,sendto的时候失败。
发送函数实现如下:
pUdp = (PUdpHeader)(sendbuf+sizeof(IpHeader));
pUdp->sourceport = htons(SELF_PORT);
pUdp->destport = htons(seq+UDP_PORT);
pUdp->lenght = htons(1024-sizeof(IpHeader));
pUdp->checknum = 0;//in_cksum((unsigned short *)pUdp,pUdp->lenght);
pIp = (PIpHeader)(sendbuf);
pIp->version = 4;
pIp->h_len = sizeof(IpHeader);
pIp->protocol = IPPROTO_UDP;
pIp->length = htons(1024);
pIp->tos = 0;
pIp->ttl = ttl;
pIp->id = htons(SELF_PORT+seq);
pIp->flag_and_flags = 0;
pIp->destip = dest.sin_addr.S_un.S_addr;
pIp->sourceip = inet_addr("192.168.0.241");
pIp->checksum = in_cksum((unsigned short *) pIp,pIp->h_len);
int i = sendto(sendsock,sendbuf,1024,0,(struct sockaddr *)&dest,sizeof(struct sockaddr));
if(i<0 || i!=1024)
{
int errcode = WSAGetLastError();
perror("send sock data");
exit(0);
}
这里失败的errcode = 10004."一个封锁操作被对 WSACancelBlockingCall 的调用中断。 "不明白是什么原因?