设置UDP套接字的recv fcn超时

设置UDP套接字的recv fcn超时,第1张

概述设置UDP套接字的recv fcn超时

我sendto发送一个UDP数据包,然后通过recv接收到答案。如果recv没有收到答复,程序不会继续。 但是,udp数据包可能会丢失,或由于某种原因,数据包可能无法传递,以致程序卡住recv行。 我想知道如果nopacket到达,例如一分钟,如何设置recv的超时时间,然后跳过该行并继续执行代码?

我不粘贴完整的代码,因为它是一个通用的udp代码,我的问题是唯一的recv 。 最后的说明,开发环境是linux。

unsigned long buf[maxlen]; struct protoent *proto; // struct sockaddr_in server_addr; int s; // socket memset( &server_addr,sizeof( server_addr )); server_addr.sin_family=AF_INET; server_addr.sin_addr.s_addr = inet_addr(hostname); sendto(s,msg,sizeof(msg),(struct sockaddr *)&server_addr,sizeof(server_addr)); recv(s,buf,sizeof(buf),0);

实现自定义windows身份valIDation包

Msys在Powershell中 – 没有这样的文件或目录

我们必须使用C“出于性能原因”

放弃在windows上的权利

如何在OPENGL之上定位状态栏?

COM服务器作为windows服务,不能传递数组作为函数参数

OpenCV错误:断言失败(a_size.wIDth == len)

当应用程序崩溃时,如何处理linux缓冲区caching?

使用GCC构buildlinux可执行文件

为什么Microsoft.Build.Evaluation在64位PC上将$(Programfiles)评估为“c: program files”?

您可以使用poll或select或类似的东西:

struct pollfd fd; int res; fd.fd = s; fd.events = PolliN; res = poll(&fd,1,1000); // 1000 ms timeout if (res == 0) { // timeout } else if (res == -1) { // error } else { // implIEs (fd.revents & PolliN) != 0 recv(s,0); // we can read ... }

如何在linux中设置UDP套接字超时:

#include <sys/time.h> struct timeval timeout={2,0}; //set timeout for 2 seconds /* set receive UDP message timeout */ setsockopt(fd,Sol_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(struct timeval)); /* Receive UDP message */ int recvlen = recvfrom(fd,BUFSIZE,(struct sockaddr *)&remaddr,&slen); if (recvlen >= 0) { //Message Received } else{ //Message Receive Timeout or other error }

我想知道如何设置recv超时

使用SO_RCVTIMEO选项调用setsockopt() 。

总结

以上是内存溢出为你收集整理的设置UDP套接字的recv fcn超时全部内容,希望文章能够帮你解决设置UDP套接字的recv fcn超时所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存