Python socket.error: [Errno 98] Address already in use
2014-05-13 17:08
726 查看
刚刚在编写socket通信的程序的时候,在运行完通信过程后,发现再运行服务器端的程序的时候发现出现下面的错误:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201405/a7e3ede61bf20db38cee2d73bd91af23)
查询相关文档才知道在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回复,此时它就会正常关闭连接!
查询相关文档才知道在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 编程,OSError: [Errno 98] Address already in use
- Python socket.error: [Errno 98] Address already in use的原因和解决方法
- Python socket.error: [Errno 98] Address already in use的原因和解决方法
- python socket.error: [Errno 48] Address already in use
- 解决socket.error: [Errno 98] Address already in use问题
- socket.error: [Errno 98] Address already in use
- python启动失败 error: [Errno 98] Address already in use
- 解决socket.error: [Errno 98] Address already in use问题
- socket.error: [Errno 98] Address already in use
- python socket.error: [Errno 48] Address already in use
- 这里有最完美的解决socket.error: [Errno 98] Address already in use问题
- linux下如何解决socket的error: [Errno 98] Address already in use
- ubuntu中python运行提示[Errno 98] Address already in use
- Flask: socket.error: [Errno 48] Address already in use 问题
- 启动openstack-nova-api.service 报错:ERROR nova error: [Errno 98] Address already in use
- 【ubuntu】error: [Errno 98] Address already in use
- MAC OS X中解决SOCKET.ERROR: [ERRNO 48] ADDRESS ALREADY IN USE 端口占用问题
- GAE发生在OS X上socket.error: [Errno 48] Address already in use 问题的解决方法