我用C语言中的sendto函数得到了奇怪的结果。(LINUX) 我想要做的是实现一种可靠的UDP方案。
下面提供的代码片段是定时器的一部分,当数据包被丢弃时它会过期并向进程发送消息以重新传输该数据包。
我遇到的奇怪问题是,当传输大文件时说...> 300KB 下面给出的代码完美无缺(即ELSE部分已执行) 但是在发送了一定数量的数据包后......它会执行当时的部分。!!!
这是明显的,因为该代码对于250个包装而言仍然很好,但是包装有251个包装 kabooom!
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");
请帮助!!!! 提前谢谢
答案 0 :(得分:1)
Bad file descriptor
错误表示传递的sockfd
值不正确。之一:
要捕获第二种情况,请在调试器下运行程序并在sockfd
变量上设置一个观察点 - 当值发生变化时,这将进入调试器,这可以让你看到它在何时被更改不应该。
您还可以尝试在valgrind
下运行该程序,并修复它报告的任何问题。