Python socket.error: [Errno 98] Address already in use的原因和解决方法


Posted in Python onAugust 25, 2014

一、原因浅析

今天在写一个Python与html5 Websocket 实例,么次终止运行重新运行脚本总是提示地址已经存在并且被使用!查询相关文档才知道在socket编程中,当通过客户端向服务器端发送消息,关闭了连接后,这时如果马上再去运行服务器端程序,会提示这个错误:

socket.error: [Errno 98] Address already in use

这是因为在TCP/IP终止连接的四次握手中,当最后的ACK回复发出后,有个2MSL的时间等待,MSL指一个片段在网络中最大的存活时间,这个时间一般是30秒,所以基本上过60秒后就可以重新连接!
为什么要等待2MSL?是因为在最后发出ACK回复后,发送方不能确认ACK是否被另一端正常收到,如果另一端没有收到ACK回复的话,将会在1MSL后再次发送FIN片段。所以说发送方等待2MSL时间,也就是刚好它发ACK回复和对方发送FIN片段的时间,如果此时间内都没有再次收到FIN片段的话,发送方就假设对方已经正常接收到了ACK回复,此时它就会正常关闭连接!

二、解决方法

如果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)

例如:

        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)) 
Python 相关文章推荐
Python 条件判断的缩写方法
Sep 06 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
Python实现求最大公约数及判断素数的方法
May 26 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 Python
python实现随机调用一个浏览器打开网页
Apr 21 Python
python中datetime模块中strftime/strptime函数的使用
Jul 03 Python
nohup后台启动Python脚本,log不刷新的解决方法
Jan 14 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
python实现知乎高颜值图片爬取
Aug 12 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
Python操作Jira库常用方法解析
Apr 10 Python
Python对小数进行除法运算的正确方法示例
Aug 25 #Python
Python实现的一个自动售饮料程序代码分享
Aug 25 #Python
Python中请使用isinstance()判断变量类型
Aug 25 #Python
Python中变量交换的例子
Aug 25 #Python
Python实现的一个找零钱的小程序代码分享
Aug 25 #Python
Python跳出循环语句continue与break的区别
Aug 25 #Python
Python中声明只包含一个元素的元组数据方法
Aug 25 #Python
You might like
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
2016/05/10 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
常用的javascript设计模式
2017/01/11 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python根据京东商品url获取产品价格
2015/08/09 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
python实现上传文件到linux指定目录的方法
2020/01/03 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
表演方阵解说词
2014/02/08 职场文书
文员岗位职责范本
2014/03/08 职场文书
住宅质量保证书
2014/04/29 职场文书
老人再婚离婚协议书范本
2014/10/27 职场文书
淘宝好评语句大全
2014/12/31 职场文书
工程部经理岗位职责
2015/02/02 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书