这里有最完美的解决socket.error: [Errno 98] Address already in use问题
2018-02-26 17:37
676 查看
一、基本设置
如果python中socket 绑定的地址正在使用,往往会出现错误,
在linux下:
则会显示“ socket.error: [Errno 98] Address already in use”
在windows下:
则会显示 “socket.error: [Errno 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次”
这是因为socket默认不支持地址复用,如果要复用需要显示设定,即在绑定前调用setsockop函数t让套接字允许地址重用:socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
例如:
[python] view plain copy self.recSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.recSocket.settimeout(CHECK_TIMEOUT)
self.recSocket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
self.recSocket.bind(('', UDP_PORT))
二、进一步设置(并发连接量大需要设置)
上述是在程序中设置重用,此外如果并发连接请求过多的时候,即短时间内连接请求很多,系统自动释放已占用端口的时间还没有到,又有连接请求(可用的端口已经被用完),所以还会出现 Address already in use错误提示),就会产生大量的TIME_WAIT状态的连接。这种情况下就有必要调整下Linux的TCP/IP内核参数,让系统更快的释放TIME_WAIT连接。用vi打开配置文件:
[python] view plain copy # vi /etc/sysctl.conf
然后,在这个文件中,加入下面的几行内容(详细内容及解释参见 文章 修改Linux内核参数,减少TCP连接中的TIME-WAIT、linux TCP连接配置):
[python] view plain copy net.ipv4.tcp_syncookies = 1 # 这一行配置文件里如果有就不用添加了
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 5
最后输入下面的命令,让内核参数生效:
[python] view plain copy # /sbin/sysctl -p
如果python中socket 绑定的地址正在使用,往往会出现错误,
在linux下:
则会显示“ socket.error: [Errno 98] Address already in use”
在windows下:
则会显示 “socket.error: [Errno 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次”
这是因为socket默认不支持地址复用,如果要复用需要显示设定,即在绑定前调用setsockop函数t让套接字允许地址重用:socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
例如:
[python] view plain copy self.recSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.recSocket.settimeout(CHECK_TIMEOUT)
self.recSocket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
self.recSocket.bind(('', UDP_PORT))
二、进一步设置(并发连接量大需要设置)
上述是在程序中设置重用,此外如果并发连接请求过多的时候,即短时间内连接请求很多,系统自动释放已占用端口的时间还没有到,又有连接请求(可用的端口已经被用完),所以还会出现 Address already in use错误提示),就会产生大量的TIME_WAIT状态的连接。这种情况下就有必要调整下Linux的TCP/IP内核参数,让系统更快的释放TIME_WAIT连接。用vi打开配置文件:
[python] view plain copy # vi /etc/sysctl.conf
然后,在这个文件中,加入下面的几行内容(详细内容及解释参见 文章 修改Linux内核参数,减少TCP连接中的TIME-WAIT、linux TCP连接配置):
[python] view plain copy net.ipv4.tcp_syncookies = 1 # 这一行配置文件里如果有就不用添加了
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 5
最后输入下面的命令,让内核参数生效:
[python] view plain copy # /sbin/sysctl -p
相关文章推荐
- 解决socket.error: [Errno 98] Address already in use问题
- 解决socket.error: [Errno 98] Address already in use问题
- GAE发生在OS X上socket.error: [Errno 48] Address already in use 问题的解决方法
- Mac OS X中解决socket.error: [Errno 48] Address already in use 端口占用问题
- Python socket.error: [Errno 98] Address already in use的原因和解决方法
- linux下如何解决socket的error: [Errno 98] Address already in use
- MAC OS X中解决SOCKET.ERROR: [ERRNO 48] ADDRESS ALREADY IN USE 端口占用问题
- Python socket.error: [Errno 98] Address already in use的原因和解决方法
- socket.error: [Errno 98] Address already in use
- Python socket.error: [Errno 98] Address already in use
- socket.error: [Errno 98] Address already in use
- Python Socket 编程,OSError: [Errno 98] Address already in use
- Flask: socket.error: [Errno 48] Address already in use 问题
- python socket.error: [Errno 48] Address already in use
- Linux下Socket编程的端口问题( Bind error: Address already in use )
- socket 关闭但端口占用问题 Bind: Address Already in Use Or How to Avoid this Error when Closing TCP Connections
- Linux下Socket编程的端口问题( Bind error: Address already in use )
- nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)问题的解决