码迷,mamicode.com
首页 > 其他好文 > 详细

bind出现Address already in use

时间:2014-08-18 21:43:52      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:style   color   使用   问题   ad   服务器   应用   sp   

如果先ctrl+c结束服务器端程序的话,再次启动服务器就会出现Address already in use这个错误,或者你的程序在正常关闭服务器端socket后还是有这个问题

 

 bind 普遍遭遇的问题是试图绑定一个已经在使用的端口。该陷阱是也许没有活动的套接字存在,但仍然禁止绑定端口(bind 返回 EADDRINUSE),它由 TCP 套接字状态 TIME_WAIT 引起。该状态在套接字关闭后约保留 2 到 4 分钟。在 TIME_WAIT 状态退出之后,套接字被删除,该地址才能被重新绑定而不出问题。

等待 TIME_WAIT 结束可能是令人恼火的一件事,特别是如果您正在开发一个套接字服务器,就需要停止服务器来做一些改动,然后重启。幸运的是,有方法可以避开 TIME_WAIT 状态。可以给套接字应用 SO_REUSEADDR 套接字选项,以便端口可以马上重用。

 

但是对于LISTEN 端口

即使你设置了 SO_REUSEADDR选项,对于LISTEN状态的端口,也是不能重复监听的

如何解决呢?

例如要关闭22号端口:
 
 
 
$ netstat -anp | grep :22
tcp   0    0 0.0.0.0:22      0.0.0.0:*     LISTEN     1666/sshd
 
 
# -a 显示所有活动的TCP连接,以及正在监听的TCP和UDP端口
 
# -n 以数字形式表示地址和端口号,不试图去解析其名称(number)
 
# -p 列出与端口监听或连接相关的进程(有个地方需要注意,下面会提到)(pid)
 
 
 
知道了22号端口对应的进程ID 1666,只要:
 
$ kill 1666
即可。

bind出现Address already in use,布布扣,bubuko.com

bind出现Address already in use

标签:style   color   使用   问题   ad   服务器   应用   sp   

原文地址:http://www.cnblogs.com/notlate/p/3920326.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!