我在 C 语言中使用 sendto 函数得到了奇怪的结果。(LINUX) 我想做的是实现一种可靠的UDP类型的方案。
下面提供的代码片段是计时器的一部分,当数据包被丢弃并向进程发送消息以重新传输该数据包时,计时器就会到期。
我遇到的奇怪问题是,当传输大文件时,比如...>300KB 下面给出的代码完美运行(即其他部分已执行) 但是在发送一定数量的数据包之后......它执行then部分。!!!
这很奇怪,因为代码对于大约 250 个数据包运行良好,但对于 251 个数据包 卡布姆!!!
n = sendto(sockfd, &(forwardPeer->id), sizeof(forwardPeer->id), 0, (struct sockaddr*)&tcpd_addr, sizeof(tcpd_addr));
if(n<0)
printf("\n error sending to tcpdc");
else
printf("\n message sent to tcpdc");
请帮忙!!!! 提前致谢
最佳答案
错误文件描述符
错误意味着传递的sockfd
值不正确。要么:
- 文件描述符已关闭;或
- 该变量的值已被垃圾覆盖,可能是由于程序中某处发生了边界溢出。
要捕获第二种情况,请在调试器下运行程序并在 sockfd
变量上设置一个观察点 - 当值发生变化时,这将中断到调试器,这应该让您看到它的位置不该改变的时候却改变了。
您还可以尝试在 valgrind
下运行该程序,并修复它报告的任何问题。
关于C sendto 有时可以工作...只是在一段时间后停止...没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5256909/