jk_lrl 发表于 2012-09-27 20:06

求教关于IPv6原始套接字发送UDP数据报的问题

写了一个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;
        }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, &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
页: [1]
查看完整版本: 求教关于IPv6原始套接字发送UDP数据报的问题