#include <stdio.h>
#include <sys/socket.h>
#include <netdb.h>
int main () {
char buf[4] = { 0xff, 0xff, 0xff, 0xff };
struct addrinfo adr, *res;
adr.ai_family = AF_INET;
adr.ai_socktype = SOCK_DGRAM;
getaddrinfo ("192.168.1.1", NULL, &adr, &res);
int sd = socket (res->ai_family, res->ai_socktype, res->ai_protocol);
if (sendto (sd, buf, sizeof (buf), MSG_OOB, res->ai_addr, res->ai_addrlen) < 0)
perror ("ERROR sendto"); //I have added an if tag and an error message posiblility
return 0;
}
错误发送到:不支持操作
这就是所有的信息。beej的网络编程指南,我已经读过getaddrinfo的第二个参数是空的,并且我已经编译好了,会很好的,没有问题的这行。目前的问题是操作不支持错误消息。
发布于 2014-02-22 22:44:34
似乎有几个错误。
首先,我认为MSG_OOB对于UDP是非法的。这可能就是错误消息想要表达的意思。改为尝试0。
然后,getaddrinfo()
调用看起来很奇怪(至少我不明白这一点)。你说“我编译了它,它会很好,这一行没有问题”,但你没有错误处理来证明它……
我的直觉是,您在sendto()
中使用的套接字地址的地址或端口是不正确的,并且在修复MSG_OOB之后仍然会出现错误。有没有什么原因让你不像here那样手动设置它们--你想让getaddrinfo()
为你选择一个合适的端口吗?我不认为这是可行的:
如果service为NULL,则返回的套接字地址的端口号将保持未初始化状态。
https://stackoverflow.com/questions/21954859
复制相似问题