如果要使用某个一个被占用的地址和端口,将会返回一个错误,阻止该套接字绑定到该地址。要想使用这个被占用的地址和端口就需要进行一定的设置,使其能够进行正常的绑定的行为,而这个设置则就是地址重用。
系统默认阻止重复绑定有其道理,而地址重用也有其存在的意义。在服务器正常关闭与意外崩溃后,操作系统都会保留一段时间的套接字资源,这样做是为了防止历史连接过过程中的数据对下一次连接造成干扰和影响,但是这样却不利于我们高效利用网络资源,尤其是一些频繁绑定与释放网络的任务中,这些暂留的时间会造成大量无法被有效利用的网络资源。
为了实现地址重用,我们可以使用setsockopt()
函数,并指定SO_REUSEADDR
选项。下面是一个使用C语言的例子:
#include <sys/socket.h>
#include <netinet/in.h>
int reuse_addr = 1;
setsockopt(socket_fd,SOL_SOCKET,SO_REUSEADDR,&reuse_addr,sizeof(reuse_addr));
在上面的例子中,socket_fd
是套接字描述符,reuse_addr
是一个整数变量,用于指定是否启用地址重用。