【发布时间】:2011-10-20 23:41:24
【问题描述】:
我的程序遇到了一个奇怪的问题。
我一直在使用 UDP 传输文件,使用标准的 sendto 和 recvfrom。
我让服务器和客户端在程序期间多次来回通信。
我刚刚在服务器代码中添加了一个新的 sendto 调用,它在执行时给了我这个错误。
Address family not supported by protocol. 这来自我的 sendto 函数。
这是它正在执行的代码:
if ((numbytes = sendto(sockfd,sDropped,strlen(sDropped), 0,
(struct sockaddr *)&their_addr, p->ai_addrlen)) == -1) {
perror("talker: sendto");
exit(1);
}
正如我所说,这段代码在程序的早期工作了大约 4 次,所以我确信我已经把所有东西都连接好了。
有没有人熟悉这个问题,并且可以告诉我在我的程序中检查什么可能会产生这个问题?
谢谢。
【问题讨论】:
-
我怀疑
their_addr不是一个有效的struct sockaddr_in或者任何适合正在使用的地址系列的结构。也许它是一个没有sockaddr结构头的原始 IP 地址......?我认为你应该使用p->ai_addr。 -
尽管看起来有些东西显然没有正确设置/定义,你应该添加你的 sockfd 代码,p 指向的结构,以及它们的_addr,加上 prio 相关的 socket(),connect()(可能没有作为 UDP) 调用等。否则很难看到发生了什么。
-
根据错误,您可能正在使用带有 UDP send() 的 tcp 套接字,或类似的东西。
-
我不明白的是它之前没有任何问题......它经历了4个左右的调用没有问题,发送数据并且没有任何投诉。提到的任何问题都不会影响每次通话吗?
-
那么你可能有一个内存损坏错误覆盖了地址结构;可能是相邻数组变量中的缓冲区溢出...
标签: c networking udp