C sendto有时会工作......只是在一段时间后停止......没有错误

时间:2011-03-10 07:58:41

标签: c sendto

我用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");     

请帮助!!!! 提前谢谢

1 个答案:

答案 0 :(得分:1)

Bad file descriptor错误表示传递的sockfd值不正确。之一:

  • 文件描述符已关闭;或
  • 该变量的值已被垃圾覆盖,可能是由于程序中某处出现了边界溢出。

要捕获第二种情况,请在调试器下运行程序并在sockfd变量上设置一个观察点 - 当值发生变化时,这将进入调试器,这可以让你看到它在何时被更改不应该。

您还可以尝试在valgrind下运行该程序,并修复它报告的任何问题。