setsockopt设置端口复用的作用(bind绑定失败)
来源:互联网 发布:焊接机器人编程视频 编辑:程序博客网 时间:2024/04/30 04:40
本文转自:http://www.2cto.com/kf/201208/150347.html
写Socket程序的时候经常会遇到这个问题:如果自己的程序不小心崩溃了,重新启动程序的时候往往会在bind调用上失败,错误原因为Address Already In Use,往往要等待两分钟才能再次绑定。但是在很多的程序(比如nginx)中好像并不存在这个问题,就算被KILL了也能立刻重启。这个区别还是比较头痛的。
其实我猜Unix Socket编程这样的书上有讨论过这方面的问题,不过我竟然没有这方面的书籍(完全靠man看来也是行不通啊)。我曾经天真的以为,在收到SIGTERM这样的信号的时候把所有套接字全部关闭可以解决问题。后来才发现无济于事。Google了这方面的文章才知道,解决这个问题理论上有三种办法。
s = socket(AF_INET, SOCK_STREAM, 0);
/* What you need to do is add the following two line to your code */
unsigned value = 1;
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
/* Then do other things */listen(s, SOMAXCONN);/* ... */
而解决这个安全性的问题的方法其实也不难(其实换个没问题的操作系统就可以了不是?),只要把套接字绑定绑定到具体的网络设备的IP地址(比如绑定到127.0.0.1,或者a.b.c.d)即可,大不了为每个网络设备建一个套接字。如果实施起来有难度,只能考虑后面的两种方法。
3.让客户端先关闭连接。如果所有的连接关闭事件都在客户端首先发生,那么也不会存在这个问题。不过这种做法可能需要修改协议,而且貌似很容易恶意连接攻击。修改系统TCP超时时间,这种方法很不推荐。
- setsockopt设置端口复用的作用(bind绑定失败)
- bind端口失败,重绑定
- setsockopt绑定80端口
- bind端口复用(可重复绑定同ip同端口)
- 如何获取bind绑定的端口号
- setsockopt的常用选项设置及作用
- setsockopt的常用选项设置及作用
- bind端口复用
- bind端口复用
- 设置端口可以重用 setsockopt()
- setsockopt解决端口被重复绑定问题
- 【Linux网络编程】绑定( bind )端口需要注意的问题
- poll()例程(包含 bind,listen,accept,setsockopt 的用法)
- setsockopt解决套接字绑定失败
- setsockopt的作用
- setsockopt的作用
- setsockopt的作用
- setsockopt的作用
- Leetcode: Search in Rotated Sorted Array II
- 平衡二叉树以及平衡二叉树旋转
- python中的全局变量
- 二维数组做形参
- linux下git方法初探
- setsockopt设置端口复用的作用(bind绑定失败)
- 哈夫曼树
- POJ 2096 Collecting Bugs
- Linux论文资源1
- 解决VC中动态加载DLL时,必须将DLL文件放在EXE文件路经和系统目录下的问题
- 键盘常用符号的英文读法
- python 简单算法
- 检测四川麻将是否胡牌算法的实现
- 数字图像处理(二) 基于LSB的图像加密