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

作者:junjie 时间:2021-07-12 01:27:02 

一、原因浅析

今天在写一个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,socket.error:,[Errno,98],Address,already,in,use
0
投稿

猜你喜欢

  • Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】

    2022-06-12 22:00:40
  • 编写SQL Server的扩展存储过程实例

    2009-01-20 15:45:00
  • asp xml 缓存类

    2011-04-03 11:20:00
  • asp如何将RGB颜色转化成到16进制的?

    2009-11-26 20:41:00
  • 第一类工厂与哈希对象

    2009-12-28 13:14:00
  • xmlhttp 乱码 比较完整的解决方法 (UTF8,GB2312)

    2008-05-02 21:02:00
  • Python多线程结合队列下载百度音乐的方法

    2022-12-01 11:43:18
  • 对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解

    2023-06-04 19:17:50
  • javascript获取来源的URL代码

    2009-02-25 12:36:00
  • Python除法之传统除法、Floor除法及真除法实例详解

    2023-03-11 18:03:46
  • PDO::query讲解

    2023-06-08 18:09:37
  • python复制文件到指定目录的实例

    2021-03-17 17:10:26
  • 修改Python的pyxmpp2中的主循环使其提高性能

    2022-07-22 15:26:53
  • Python字符串中添加、插入特定字符的方法

    2021-05-14 00:16:53
  • 基于Python中单例模式的几种实现方式及优化详解

    2022-10-24 14:20:45
  • asp DateDiff实现文字在特定时间后消失

    2011-03-11 11:11:00
  • 使用Python处理json字符串中的非法双引号问题

    2021-01-19 19:26:13
  • Asp编写不再让人讨厌的自动弹出窗口

    2007-09-29 12:16:00
  • python实现健康码查验系统

    2022-06-27 06:31:34
  • python检测服务器端口代码实例

    2023-07-07 06:34:14
  • asp之家 网络编程 m.aspxhome.com