使用setsockopt()来控制recv()与send()的超时,在阻塞时
来源:互联网 发布:js 判断时间有效性 编辑:程序博客网 时间:2024/06/10 05:48
linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别
UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后recvfrom就会被阻塞,这时就需要设置 这两个参数的值提高程序质量。
linux:
struct timeval timeout={3,0};//3s
int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,&timeout,sizeof(timeout));
int ret=setsockopt(sock_fd,SOL_SOCKET,SO_RCVTIMEO,&timeout,sizeof(timeout));
如果ret==0 则为成功,-1为失败,这时可以查看errno来判断失败原因
int recvd=recv(sock_fd,buf,1024,0);
if(recvd==-1&&errno==EAGAIN)
{
printf("timeout\n");
}
windows:
int timeout = 3000; //3s
int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,&timeout,sizeof(timeout));
int ret=setsockopt(sock_fd,SOL_SOCKET,SO_RCVTIMEO,&timeout,sizeof(timeout));
而solaris,则不支持。
int nNetTimeout=1000;//1秒,
//设置发送超时
setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));
//设置接收超时
setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));
//设置发送超时
setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(struct timeval));
setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval));
- 使用setsockopt()来控制recv()与send()的超时,在阻塞时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时[转]
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 用setsockopt()来控制recv()与send()的超时
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值及用setsockopt()来控制recv()与send()的超时
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值及用setsockopt()来控制recv()与send()的超时
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值及用setsockopt()来控制recv()与send()的超时
- poj 2486 树形dp(吃苹果)
- POJ2488 A Knight's Journey(DFS)
- 揭开私有继承的面纱
- Qt中的线程
- 嵌入式LINUX环境下视频采集知识(V4L2)
- 使用setsockopt()来控制recv()与send()的超时,在阻塞时
- Linux - 非阻塞socket编程处理EAGAIN错误
- Mac使用技巧之Finder的个人收藏
- XDOJ1261 - 递推2
- javascript xml字符串转为JSON对象
- 解析oracle的rownum
- Python(2.7.x)文件操作的简单示例
- 大数
- ZOJ 3666 Alice and Bob 基础博弈