- 论坛徽章:
- 0
|
写了一个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 |
|