我们在编写应用程序的过程中,通常会遇到这样的情况,因为某些原因,程序被系统多次或者反复调用,导致程序耗尽系统内存或者出现不可预知的错误,最终影响到程序原本的设计需求,这显然不是我们所希望看到的结果,但是如果在程序内部加上必要的判断,不管系统是否多次调用,都能防止同一时刻多个同样的程序同时运行。 阅读全文
设置端口复用,我们调用setsockopt()函数,并使用SO_REUSEADDR和SO_REUSEPORT选项。
一、SO_REUSEADDR主要有4方面的作用:
1、允许一个监听服务bind到现在正在被使用的端口上
例如: (1)创建一个套结字并bind到7080端口上,listen该套结字
(2)一个客户端connect该端口,accept该连接并转交给派生出来的子进程
(3)close监听套结字(注意此时子进程维护的客户端过来的连接依然存在)
(4)重新创建套结字并bind该7080端口,listen该套结字
最后一部在bind的时候会报错“Address already in use”,如果在bind之前用setsockopt设置SO_REUSEADDR选项,则不bind不会报错。 阅读全文