45.Linux编程---网络属性设置

一. 网络属性设置

在前几节的编程中通过ctrl+C退出服务器端后,原本好用的代码再次执行的时候,却连接不上了,大约经过几分钟之后又能重新连接,后来添加了以下代码后,问题就解决了。

int b_reuse =1;

setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&b_reuse,sizeof(int));

那么这两句代码是什么意思呢??

其实这个函数就是改变了套接字fd的属性。

那么我们详细看一下这个函数。

函数名

int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);

所需头文件

#include <sys/types.h>
#include <sys/socket.h>

功能

通过IP获取主机的完整信息

传入参数

sock

level

 optname

optval

optlen

将要被设置选项的套接字

选项所在的协议层。

1)SOL_SOCKET:通用套接字选项. (应用层)
2)IPPROTO_IP:IP选项. (网络层)
3)IPPROTO_TCP:TCP选项.(传输层)

需要访问的选项名

指向包含新选项值的缓冲

选项的长度

 

返回值

成功执行时,返回0。失败返回-1,errno被设为以下的某个值  
EBADF:sock不是有效的文件描述词
EFAULT:optval指向的内存并非有效的进程空间
EINVAL:在调用setsockopt()时,optlen无效
ENOPROTOOPT:指定的协议层不能识别选项
ENOTSOCK:sock描述的不是套接字

 

注:optname选项可设置如下值:

45.Linux编程---网络属性设置

 

可以改这么多属性呢,可以详细的进行学习一下,使用上都是一样的。

/*允许绑定地址快速重用 */

int b_reuse = 1;

setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &b_reuse, sizeof (int));

 

/* 允许广播 */

int b_br = 1;

setsockopt (fd, SOL_SOCKET, SO_BROADCAST, &b_br, sizeof (int));

 

/*设置接收超时*/

struct timeval tout;

tout.tv_sec = 5;

tout.tv_usec = 0;

setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, &tout, sizeof (struct timeval));