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

发布于 2024-10-21 07:52:45 字数 566 浏览 4 评论 0原文

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

请帮忙!!!! 提前致谢

Ive been getting strange results with the sendto function in C.(LINUX)
What I am trying to do is to implement a reliable UDP kind of scheme.

The snippet of code provided below is a part of the timer that expires when a packet is dropped and sends a message to a process to retransmit that packet.

The weird problem which I am having is that when transferring a large file say... >300KB
The code given below works perfectly (i.e. THE ELSE PART IS EXECUTED)
But after a certain number of packets are sent...it executes the then part.!!!

THIS IS STRANGE BECAUSE THE CODE WORKED FINE FOR ABOUT 250 PACKETS BUT WITH THE 251 PACKET
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");     

PLEASE HELP!!!!
THanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

新一帅帅 2024-10-28 07:52:45

错误文件描述符错误意味着传递的sockfd值不正确。要么:

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

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

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

The Bad file descriptor error means that the passed sockfd value is incorrect. Either:

  • The file descriptor has been closed; or
  • The value of that variable has been overwritten by junk, probably due to a bounds overflow somewhere in your program.

To catch the second case, run the program under a debugger and set a watchpoint on the sockfd variable - this will break into the debugger whenver the value changes, which should let you see where it's being changed when it shouldn't be.

You could also try running the program under valgrind, and fixing any issues it reports.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文