socket设置超时时间 SO_RCVTIMEO和SO_SNDTIMEO
vs2015必须强转一下(char *):
//创建用于监听的套接字,即服务端的套接字
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);
int nZero = 0;
setsockopt(sockSrv, SOL_SOCKET, SO_SNDBUF, (char *)&nZero, sizeof(nZero));
int timeout = 3000; //3s
setsockopt(sockSrv, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
setsockopt(sockSrv, SOL_SOCKET, SO_RCVBUF, (const char*)&nZero, sizeof(int));
c++ 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,
文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/86751529
- 点赞
- 收藏
- 关注作者
评论(0)