//设置socket属性
int getsockopt(intsockfd, int level, int optname,void *optval, socklen_t *optlen);
int setsockopt(intsockfd, int level, int optname,const void *optval, socklen_t optlen);
功能:
获得或是设置socket属性
参数:
@sockfd 要设置的socket
@level socket 层次
SOL_SOCKET //通用的socket选项
IPPROTO_IP //IP层
IPPROTO_TCP //TCp层
@optname
选项
@optval 选项对应的一些具体值
@optlen optval值的大小
返回值:
成功 0
失败 -1 &errno
//接收超时的设置
//1.设置超时时间
struct timeval tm = {5,0};
if(setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,&tm,sizeof(tm)) < 0)
{
perror("setsockopt fail");
exit(EXIT_FAILURE);
}
//设置ip+port 复用--- 开启某些选项的功能
int on = 1; //大于0 的值表示开启这项功能
if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(int)) < 0)
{
perror("setsockopt fail");
exit(EXIT_FAILURE);
}
Linux所提供的socket库中存在一个bug,即不能为一个套接字重新启用同一个端口,即使是你正常关闭该套接字以后,这是因为linux内核在一个绑定套接字的进程结束后从不把端口标记为未用。为了解决上述问题,setsockopt和getsockopt函数就被引进来了,当然它俩的功能不止这一点。
函数原型:
1. int setsockopt(int sockfd,int level,