免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2293 | 回复: 0
打印 上一主题 下一主题

[网络] 求教关于IPv6原始套接字发送UDP数据报的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-27 20:06 |只看该作者 |倒序浏览
写了一个IPv6原始套接字发送UDP数据包的程序,sendto函数的返回值总是-1,不知道为什么,哪位大神帮忙解决一下啊,小弟不胜感激!
程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<string.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<netinet/ip6.h>
#include<netinet/udp.h>
#include<errno.h>
#define SERV_PORT 9877

int main(int argc, char **argv)
{
        int sockfd;
        struct sockaddr_in6 servaddr;
        char *recvline=NULL;       
        struct {
        struct udphdr u;
        char buf[64];
        }pkt;
        if(argc !=  2)
                printf("ERROR!\n");
             //填写目的地址信息
        bzero(&servaddr, sizeof(servaddr));
        servaddr.sin6_family=AF_INET6;
        servaddr.sin6_port=htons(SERV_PORT);
        inet_pton(AF_INET6, argv[1], &servaddr.sin6_addr);
        //创建原始套接字
        sockfd=socket(AF_INET6, SOCK_RAW, IPPROTO_UDP);
        printf("sockfd:%d\n", sockfd);
        if(sockfd<0)
        {       
                printf("Socket Error!\n");
                exit(0);
        }
        //封装UDP头部       
        pkt.u.source=htons(1234);
        pkt.u.dest=htons(SERV_PORT);
        pkt.u.len=htons(sizeof(pkt));
        pkt.u.check=0;
             //封装数据
        snprintf(pkt.buf, sizeof(pkt.buf), "Hello World");
             //封装数据
        int n=sendto(sockfd, &pkt, sizeof(pkt), 0, (struct sockaddr *)&servaddr, sizeof(servaddr));       
        printf("%d\n", n);
        recvline=strerror(errno);
        printf("%s\n", recvline);
        exit(0);
}
编译程序:gcc -o a a.c
运行程序:./a 2001:da8:215:3f0:224:7eff:fede:e9ce  
其中2001:da8:215:3f0:224:7eff:fede:e9ce为目的地址
程序运行结果:-1
                    Invalid Argument
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP