我目前正在项目中使用套接字,我想在recv函数中设置5秒的超时.我在这个问题中发现,setsockopt使用SO_RCVTIMEO选项,应该这样做,但问题是它也会影响accept()函数,我只想要recv()函数超时.以下是我设置超时的方法:
/*Setting timeout for bad headers*/
struct timeval tv;
tv.tv_sec = 5; /* 5 seconds timeout for receiving a request */
tv.tv_usec= 0;
setsockopt(fd, SOL_SOCKET,
SO_RCVTIMEO,(struct timeval *)&tv,
sizeof(struct timeval));
Run Code Online (Sandbox Code Playgroud)
这个想法是,如果客户端发送损坏的标头(例如,消息长度不正确),则线程最多等待5秒钟以丢弃请求.
那么,是否可以仅为recv()函数设置此超时而不影响accept()函数?如果是这样,我该怎么办?
该SO_RCVTIMEO选项仅影响您设置它的文件描述符 - 如果您在侦听套接字上设置它,它将使accept()该套接字上的调用超时; 如果你在连接的套接字上设置它,它将使recv()该套接字上的调用超时.没有套接字可以同时拥有accept()和recv()调用它,因此不需要区分.
| 归档时间: |
|
| 查看次数: |
1889 次 |
| 最近记录: |