【问题标题】:C sendto works sometimes...just stops after some time... NO ERRORSC sendto 有时会工作...只是在一段时间后停止...没有错误
【发布时间】:2011-03-10 07:58:40
【问题描述】:

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

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

我遇到的奇怪问题是在传输大文件时说... >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");     

请帮忙!!!! 提前致谢

【问题讨论】:

  • 输出strerror(errno)以防出错,这样你就知道发生了什么。
  • Error:: Bad file descriptor I used Perror...
  • 可靠不可靠数据报协议 - 嗯....
  • 试图改变宇宙规则:P
  • 错误发送 msg 到 tcpdc 未知错误 134514723 使用 strerror

标签: c sendto


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多