Pythonsocket.error:[Errno98]Addressalreadyinuse的原因和解决方法
方法 Error 解决 原因
2023-06-13 09:15:44 时间
一、原因浅析
今天在写一个Python与html5Websocket实例,么次终止运行重新运行脚本总是提示地址已经存在并且被使用!查询相关文档才知道在socket编程中,当通过客户端向服务器端发送消息,关闭了连接后,这时如果马上再去运行服务器端程序,会提示这个错误:
socket.error:[Errno98]Addressalreadyinuse
这是因为在TCP/IP终止连接的四次握手中,当最后的ACK回复发出后,有个2MSL的时间等待,MSL指一个片段在网络中最大的存活时间,这个时间一般是30秒,所以基本上过60秒后就可以重新连接!
为什么要等待2MSL?是因为在最后发出ACK回复后,发送方不能确认ACK是否被另一端正常收到,如果另一端没有收到ACK回复的话,将会在1MSL后再次发送FIN片段。所以说发送方等待2MSL时间,也就是刚好它发ACK回复和对方发送FIN片段的时间,如果此时间内都没有再次收到FIN片段的话,发送方就假设对方已经正常接收到了ACK回复,此时它就会正常关闭连接!
二、解决方法
如果python中socket绑定的地址正在使用,往往会出现错误,
在linux下:
则会显示“socket.error:[Errno98]Addressalreadyinuse”
在windows下:
则会显示“socket.error:[Errno10048]通常每个套接字地址(协议/网络地址/端口)只允许使用一次”
这是因为socket默认不支持地址复用,如果要复用需要显示设定,即在绑定前调用setsockop函数t让套接字允许地址重用:socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
例如:
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))
相关文章
- 解决thymeleaf 现 There was an unexpected error (type=Internal Server Error, status=500).
- win7电脑卡顿严重解决方法_电脑卡顿一下
- jquery之Uncaught Error: Syntax error, unrecognized expression: #
- Mysql:2003 - Can't connect to MySQL server on 'localhost' (10061 "Unknown error") 解决方法
- fatal error解决方法_游戏fatal error
- 解决:windows下php curl https时 SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:
- Handsome插件无法启用,显示Database Query Error解决方法
- MySQL Error number: 3188; Symbol: ER_KEYRING_UDF_KEYRING_SERVICE_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: 3202; Symbol: ER_KEYRING_ACCESS_DENIED_ERROR; SQLSTATE: 42000 报错 故障修复 远程处理
- MySQL Error number: MY-011481; Symbol: ER_GRP_RPL_SET_STABLE_TRANS_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011488; Symbol: ER_GRP_RPL_CERTIFIER_MSSG_PROCESS_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011533; Symbol: ER_GRP_RPL_APPLIER_THD_SETUP_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011737; Symbol: ER_GRP_RPL_SLAVE_IO_THREAD_ERROR_OUT; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-013205; Symbol: ER_GRP_RPL_ERROR_GTID_SET_EXTRACTION; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-013491; Symbol: ER_XPLUGIN_COMPRESSION_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- mysql General error: 1366 Incorrect string value: ‘/xF0/x9F/x91/x8D/xF0/x9F…’ for column ‘dianpumiaoshu’ at row 1 解决方法详解编程语言
- mysql出现1030 Got error 28 from storage engine解决方法详解编程语言
- Linux用户权限变更方法(更改用户linux)
- Linux安全狗卸载方法:完整教程(linux安全狗卸载)
- MySQL优化:改善性能的有效方法(mysql优化思路)
- error解决Oracle 12054错误的方法(oracle12054)
- MySQL中的主关键字的作用和使用方法(mysql中主关键字)
- 初识Redis连接池的使用方法(redis连接池怎么使用)
- 让html页面不缓存js的实现方法