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

标签 c sendto

我在 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/

相关文章:

c - 如何将键盘输入输入内核?

c - 服务器C编程中如何比较客户端发送的数据

c - 发送到 : Resource temporarily unavailable (errno 11)

java - 在 Java 中,如何从 Windows 的上下文菜单中读取文件名

c - 输入相关错误 : sendto() error code 22 (Invalid argument) depending on input size

c - 目录中的通用用户?

c - 为 C 类型添加额外的标签

c - C语言编译后出错

c - 发送到() : Bad file descriptor in UDP - IPv6