1

我用 C 中的 sendto 函数得到了奇怪的结果。(LINUX)我想做的是实现一种可靠的 UDP 方案。

下面提供的代码片段是计时器的一部分,它在丢弃数据包时到期,并向进程发送消息以重新传输该数据包。

我遇到的奇怪问题是,当传输一个大文件时说......> 300KB 下面给出的代码完美运行(即执行其他部分)但是在发送了一定数量的数据包之后......它执行然后部分。!!!

这很奇怪,因为该代码适用于大约 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");     

请帮忙!!!!提前致谢

4

1 回答 1

1

Bad file descriptor错误意味着传递的值sockfd不正确。任何一个:

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

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

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

于 2011-03-11T03:20:54.003 回答