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中的break、continue、exit()、pass全面解析
Aug 05 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
python TKinter获取文本框内容的方法
Oct 11 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
3行Python代码实现图像照片抠图和换底色的方法
Oct 10 Python
python3 xpath和requests应用详解
Mar 06 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
keras训练浅层卷积网络并保存和加载模型实例
Jul 02 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
Jun 11 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
关于php unset对json_encode的影响详解
2018/11/14 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
JS组件Form表单验证神器BootstrapValidator
2016/01/26 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
nodejs中方法和模块用法示例
2018/12/24 NodeJs
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
Python卸载模块的方法汇总
2016/06/07 Python
Python 递归函数详解及实例
2016/12/27 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
python做接口测试的必要性
2019/11/20 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
Python调用飞书发送消息的示例
2020/11/10 Python
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
酒店销售经理岗位职责
2014/01/31 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
无毒社区工作方案
2014/05/23 职场文书
店铺转让协议书
2015/01/29 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL