setsockopt(server_sockfd,SOL_SOCKET,SO_REUSEADDR,&j,sizeof(j));
2017-08-16 15:39
375 查看
int j=1; setsockopt(server_sockfd,SOL_SOCKET,SO_REUSEADDR,&j,sizeof(j)); bind(server_sockfd,(struct sockaddr *)&server_add,server_len);
默认情况下,两个独立的套接字不可与同一本地接口(在TCP/IP情况下,则是端口)绑定在一起。但是少数情况下,还是需要使用这种方式,来实现对一个地址的重复使用。设置了这个套接字,服务器便可在重新启动之后,在相同的本地接口以端口上进行监听。
一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,允许重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。
SO_REUSEADDR提供如下四个功能:
SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错.SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。对于TCP,我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。
SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。
SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,还允许此IP地址和端口捆绑到另一个套接口上。
这边使用的是第四个功能。
头文件:#include
相关文章推荐
- setsockopt(server_sockfd,SOL_SOCKET,SO_REUSEADDR,&j,sizeof(j));
- setsockopt(CreateSock,SOL_SOCKET,SO_REUSEADDR,(LPSTR)&dwFlag,sizeof(dwFlag));说明
- 转:Socket和ServerSocket中SO_REUSEADDR的用处
- 谈JDBC SQLSERVER"Error establishing socket"
- setsockopt中参数之SO_REUSEADDR的意义
- 错误: MySQL server through socket '/var/run/mysqld/mysqld.sock‘
- 初识Socket&ServerSocket
- python3之socket&socketserver网络编程
- postgresql 出现 Is the server running locally and accepting connections on Unix domain socket "/var/r
- setsockopt中参数之SO_REUSEADDR的意义
- 9.2 SO_REUSEADDR配置 & TCP_NODELAY
- Mac下Mysql启动异常["ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.so
- setsockopt 设置 SO_LINGER 在Android socket编程中的一个问题:
- C# Socket TCP Server & Client & nodejs client
- setsockopt中参数之SO_REUSEADDR的意义(转)
- Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR
- setsockopt中参数之SO_REUSEADDR的意义(转)
- setsockopt中参数之SO_REUSEADDR的意义(转)
- MonitorServer代码阅读笔记(一):使用sigaction( SIGPIPE, &sa, 0)避免写一个已关闭的socket导致进程退出
- socket服务器开发中的SO_REUSEADDR选项与让人心烦的TIME_WAIT