socket的send、recv阻塞设置阻塞超时时间
2013-09-22 13:59
411 查看
int nNetTimeout=1000;//1秒, //设置发送超时 setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO, (char *)&nNetTimeout,sizeof(int)); //设置接收超时 setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO, (char *)&nNetTimeout,sizeof(int)); 这样做在 Linux环境下是不会产生效果的,须如下定义:struct timeval timeout = {3,0}; //设置发送超时 setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO, (char *)&timeout,sizeof(struct timeval)); //设置接收超时 setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO, (char *)&timeout,sizeof(struct timeval)); 有两点注意就是: 1)recv ()的第四个参数需为MSG_WAITALL,在阻塞模式下不等到指定数目的数据不会返回,除非超时时间到。还要注意的是只要设置了接收超时,在没有MSG_WAITALL时也是有效的。说到底超时就是不让你的程序老在那儿等,到一定时间进行一次返回而已。 2)即使等待超时时间值未到,但对方已经关闭了socket, 则此时recv()会立即返回,并收到多少数据返回多少数据。 |
相关文章推荐
- socket的send、recv阻塞设置阻塞超时时间
- [转]socket的send、recv阻塞设置阻塞超时时间
- socket的send、recv阻塞设置阻塞超时时间
- socket的send、recv阻塞设置阻塞超时时间
- socket为send和recv设置 4000 超时时间
- socket为send和recv设置超时时间
- C++ 之Socket 编程 send rev 阻塞设置 阻塞超时时间
- socket为send和recv设置超时时间
- socket为send和recv设置超时时间
- send和recv非阻塞时如何正确处理WSAEWOULDBLOCK和设置超时
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值及用setsockopt()来控制recv()与send()的超时
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值及用setsockopt()来控制recv()与send()的超时
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值及用setsockopt()来控制recv()与send()的超时
- 关于socket的send和recv的超时设置
- socket中各个阻塞,非阻塞,初始化和超时时间设置
- C++ Socket为send recv设置堵塞超时时间
- Socket 关于设置Socket连接超时时间
- Socket Java设置超时时间
- 关于http socket timeout 超时时间 未设置 导致线程一直在等待(线程饥饿),微信公众号开发过程遇到的。java
- 基于XSocket框架的socket编程技巧(设置连接的超时时间和最大空闲时间)