gpt4 book ai didi

c - 为 UDP 套接字的 recv fcn 设置超时

转载 作者:IT王子 更新时间:2023-10-29 00:47:38 26 4
gpt4 key购买 nike

我通过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, 0, sizeof( server_addr ));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr = inet_addr(hostname);
sendto(s,msg,sizeof(msg),0,(struct sockaddr *)&server_addr,sizeof(server_addr));

recv(s,buf,sizeof(buf),0);

最佳答案

如何在 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, buf, BUFSIZE, 0, (struct sockaddr *)&remaddr, &slen);
if (recvlen >= 0) {
//Message Received
}
else{
//Message Receive Timeout or other error
}

关于c - 为 UDP 套接字的 recv fcn 设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16163260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com