发送自己的ip包数据出错

cxjxue 2003-08-19 03:22:47
初始化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 的调用中断。 "不明白是什么原因?
...全文
47 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧