c语言 - 为什么当套接字超时时不轮询唤醒SO_RCVTIMEO?



我正在编写一个回显TCP服务器,它最多可以处理10个同时连接。它有一个空闲超时(当没有新的连接或套接字没有新的数据时(和一个套接字超时(当客户端在xx时间内没有发送任何新数据时(。

我用poll((中的timeout参数处理了第一部分。对于第二部分,对于每个新的连接,我都用选项设置套接字:

setsockopt(sd,SOL_SOCKET,SO_RCVTIMEO,&socketTimeout,sizeof(struct-timeval(

我希望当套接字超时时,它会唤醒poll((,当我在之后调用read((时,它只会返回-1,我就可以做我的事情了。但事实似乎并非如此。SO_RCVTIMEO似乎对poll((没有影响,我错过了什么?

链接您在评论中提到的文章将是有益的

同时,引用man 7 socket

超时仅对执行套接字I/O的系统调用有效(例如,读取(2(、recvmsg(2(,发送(2(和发送消息(2((;超时对select(2(、poll(2(和epoll_wait(2(等没有影响

因此,若要发生超时,必须调用readpoll仅监控数据可用性。

相关内容

  • 没有找到相关文章

最新更新