gpt4 book ai didi

c - 套接字没有等待预期的 10 秒

转载 作者:可可西里 更新时间:2023-11-01 02:47:03 24 4
gpt4 key购买 nike

在我的程序中,我将 time.h 的 timeval 结构用于 TCP/IP 套接字程序,其中客户端等待此结构值指定的超时值,结构初始化如下下面

struct timeval tv; 
tv.tv_sec = 10;
tv.tv_usec = 0;

并按原样设置套接字选项。由于 recv() 是一个阻塞调用,我设置了超时:

setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv,sizeof(struct timeval)) ;

并使用 recv() 函数接收数据。因此,为了验证延迟是否可以,我使用了两个类型为 time_t 的变量 start 和 stop:

time_t start=clock();
BytesRcvd = recv(sock, CacheBuffer1, sizeof(CacheBuffer1), FLAG);
time_t stop=clock();
time_t difference=difftime(stop,start);

所以根据定义,我期望 recv() 函数最多等待 10 秒,直到通过套接字接收到数据。从服务器端我没有发送任何东西。但是在计算差异时我得到的值是 10 但我没有感觉到接收延迟 10 秒,而是在毫秒范围内,所以我假设它只花了大约 10 毫秒

可能是什么问题??有什么想法吗?


[评论更新]

我的套接字是非阻塞的,这就是我使用 setsocketopt() 函数的原因,我想等待 10 秒的超时值,即;如果在 10 秒内没有收到数据,我必须退出 recv() 函数...

最佳答案

如果您的套接字是非阻塞的,即使您设置了超时,recv() 也不会阻塞。

设置超时对于阻塞套接字很有意义,不会让它们永远阻塞。

因此,如果您希望 recv() 阻塞一段时间,请将套接字设置为阻塞像您一样应用超时。

关于c - 套接字没有等待预期的 10 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22686921/

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