端口占用 10048的错误处理

端口占用错误

这两天在工作的过程中发现基于socket的网络程序中时不时发生connect()调用失败的错误,通过获取错误码,发现是WSAEADDRINUSE(10048)的错误,MSDN的说明如下:

这种错误常常发生在bind函数中,当bind已经绑定的端口被占用后,再次绑定同一端口就会发生错误,但这一错误不影响bind的执行,换句话说,bind第二次执行并不发生错误,但是在紧接着调用connect()时会出错,错误码就是10048。

应用程序调用bind在使用随机端口绑定时,如果操作系统预留的1024~5000之间的端口都被占用着的话,bind不出错,connect会失败。

什么情况下端口会被全部占用?

情况一:如果每个端口上都正在进行数据操作,那么端口就都处于占用状态。

情况二:connect的频率太快,每一个socket在调用closesocket进行关闭操作后,虽然closesocket执行完毕,但是对应的占用端口并不是立即释放,这些端口需要继续处于占用状态,等待时间大约2ML(数据包最大生存周期),默认最大值为4分钟。用netstat命令查看端口状态,端口显示TIME_WAIT,在4分钟内如果对同一个端口进行connect,就会发生10048错误。

如何修正错误?

方法一: 如果使用了bind函数,那么可以对绑定的端口进行指定,如果调用connect失败,那么就返回bind处更改绑定端口,然后继续connect,直到成功为止。

方法二: 如果没有使用bind函数,直接使用connect进行连接,那么可以对connect操作进行retry,在这种情况下如果connect失败,那么它下次被调用时仍会使用调用失败的端口进行连接,直到连接成功。

retry的间隔时间和次数如何确定?

理想的设定是retry的间隔时间要尽量短,次数要尽量少,但这两者是相互矛盾的,往往retry的总时间是一定的,也就是说retry的时间间隔短了,次数就多了;retry的时间间隔长了,次数就少了。呵呵,这里感觉很不好选择,那么只有通过实际的程序测试来判断了。

时间: 2024-10-10 15:35:46

端口占用 10048的错误处理的相关文章

windows下常查看端口占用方法总结

启动Tomcat时又出现端口占用错误.现在把对端口的处理命令和方法进行汇总. 1.查看所有连接的PID 开始--运行--cmd  ,输入netstat -ano 找到端口号对应的PID后,从任务管理器中停止PID对应程序. 2.查看占用1433端口程序 ①先C:>netstat -ano|findstr "1433" TCP 127.0.0.1:1433   0.0.0.0       LISTENING     4984 ②再C:>tasklist|findstr &qu

【Linux】lsof 命令,记一次端口占用查询

3月21日测试时,发现测试服务器启,总是报端口占用情况,察看端口占用情况 1-使用命令 netstat -tunlp |grep 端口号 差看下 这个端口被那个进程占用 我当前使用的 JBOSS 端口号为2005 [[email protected] ~]# netstat -tunlp |grep 2005 tcp 0 0 :::2005 :::* LISTEN 13513/java 2-使用命令 lsof -p PID 查看下 占用端口的是哪个进程 可见2005被显示的进程(PID=1351

Dos端口占用情况查询及操作

在进行JavaWeb项目的学习性开发时,Tomcat布置出了问题!捣鼓了一个下午,很多时候看到是端口占用的错误! 先不去深究占用的缘故,业已经发现了问题所在,先做笔记查出占用的缘故及解决方法! 步骤一:cmd输入:输入 netstat -ano(展示所有端口占用情况)  端口被占用后在eclipse中的提示:   步骤二:netstat -aon|findstr "端口号"(查询具体端口的占用问题,最后一排是进行编号)  步骤三:tasklist|findstr "查询出的

Tomcat(8005,8080,8009)端口占用问题常见原因及解决方法

Tomcat(8005,8080,8009)端口占用问题常见原因及解决方法 在企业版Eclipse中,在已经启动了Tomcat服务器后,准备运行页面或Servlet时,有时会出现这样的关于Tomcat服务器端口占用的问题: “Several ports (8005, 8080, 8009) required by Tomcat v6.0 Server at localhost are already in use. The server may already be running in ano

Dos命令查看端口占用及关闭进程

1. 查看端口占用 在windows命令行窗口下执行: netstat -aon|findstr "8080" TCP 127.0.0.1:80 0.0.0.0:0 LISTENING 2448 端口"8080"被PID(进程号)为2448的进程占用. 查看端口"8080"被哪个应用占用,,继续执行下面命令: tasklist|findstr "2448" notepad.exe 2016 Console 0 16,064 K

Dos命令查看端口占用及关闭进

Dos命令查看端口占用及关闭进程 1. 查看端口占用 2. 关闭进程 3. 端口状态 1. 查看端口占用 在windows命令行窗口下执行: netstat -aon|findstr "8080" TCP 127.0.0.1:80 0.0.0.0:0 LISTENING 2448 端口“8080”被PID(进程号)为2448的进程占用. 查看端口“8080”被哪个应用占用,,继续执行下面命令: tasklist|findstr "2448" notepad.exe

Node端口占用处理(throw er: // Unhandled 'error' event)

发现此错误一般是端口被占用了. 1. 在www.js 文件中修改监听端口也可能是项目中的config.js里的port后面的值. 2.不改端口,关闭占用的端口 在命令行中,输入以下命令找到对应进程的PID, netstat -ano|finstr "8000" 然后输入以下命令结束端口使用 taskkill -PID <进程号> -F 或者进入进程管理器,找到对应PID的进程,结束它. 以上是对windows 下面是mac 第一:运行以下命令,可以看到占用端口号的进程ID

windows下关闭指定端口服务,解决tomcat端口占用问题

http://blog.aizhet.com/Server/640.html 在windows下做java EE的开发时:搭建 Eclipse+tomcat的java web开发环境:在应用之中经常遇到 tomcat在重新启动服务时,端口占用问题:导致无法启动服务: 错误提示: Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The server ma

netstat怎样查看端口占用?netstat命令详解

netstat是使用比较频繁的端口查看命令,监控TCP/IP网络非常有用的工具.在使用VPS或云服务器上安装启动IIS.Apache或tomcat等网站环境软件时,常会遇到80端口被占用而无法启动错误,这时就可以利用netstat命令查看80端口占用情况. netstat命令详解: netstat命令一般格式为:netstat[-a][-e][-n][-o][-pProtocol][-r][-s][Interval] 详细参数介绍: -a 显示所有socket,包括正在监听的. -c 每隔1秒就