socket为send和recv设置超时时间
设置 时间 socket 超时 send recv
2023-09-27 14:29:32 时间
UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后recvfrom就会被阻塞,这时就需要设置 这两个参数的值提高程序质量。
struct timeval timeout={3,0};//3s
int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,(const char*) timeout,sizeof(timeout));
int ret=setsockopt(sock_fd,SOL_SOCKET,SO_RCVTIMEO,(const char*) 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));
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,(const char*) timeout,sizeof(timeout));
int ret=setsockopt(sock_fd,SOL_SOCKET,SO_RCVTIMEO,(const char*) 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,则不支持。
相关文章
- 007_苹果Mac系统锁屏不待机效果设置方法介绍
- Redis(三十三)-Redis键过期时间设置以及过期键删除策略
- centos7设置时间和时区
- redmine和jenkins的ldap登录设置
- Java实现股票的量化自动交易:新增最大持仓时间设置
- jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等
- Mysql设置编码
- Prometheus学习笔记之设置存储时间为30天不生效
- 如何开启Windows 10隐藏的锁屏时间设置项
- phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护
- ubuntu环境变量的三种设置方法
- 远程连接postgresql和redis设置
- mysql更新时设置ON UPDATE CURRENT_TIMESTAMP保存数据库的时间
- 解决body设置height:100%无效问题
- RestTemplate设置超时时间
- CentOS7 设置集群时间同步
- P1364 医院设置 题解
- eclipse快速复制一行代码(向下/向上)快捷键修改设置