Linux下Socket编程的端口问题( Bind(): Address already in use )

Soap_bind 问题 Address already in use 终于解决 最近一个月在开发onvif的开发;遇到唯一并且男解决的问题就是 bind 出错情况 老是出现“Address already in use”socket 系统错误!  和此问题纠缠了不少时间,从onvif的开发一个月前 ,做onvif评估开发等就有这个问题,由于在linux虚拟机上跑这个程序不会出现该问题;后来移植到arm上就冒出来了! 由于一面开发 又忙着解决问题 一直都没有很好的解决!就提 阅读详情

yuantiedizhi:

http://blog.youkuaiyun.com/xl_xunzhao/archive/2008/10/23/3130037.aspx

 

Linux 下 Socket 编程的端口问题 ( Bind(): Address already in use )

转载请注明 本文引用地址 http://blog.youkuaiyun.com/xl_xunzhao/archive/2008/10/23/3130037.aspx 

最近在开发一个 Linux 下的聊天软件,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误:

Cann't bind server socket !

: Address already in use

虽然用 Ctrl + C 强制结束了进程,但错误依然存在,用 netstat -an |grep 5120 和 ps aux |grep 5120 都还能看到刚才用 Ctrl+C“ 强制结束”了的进程,端口还是使用中,只好每次用 kill 结束进程,很是麻烦。昨天晚上无意间浏览到 IBM 网站上的一篇题为《 Linux 套接字编程中的 5 个隐患 》 的文章,恍然大悟,今天试了一下,果然解决问题,在此表示感谢,也希望更多的 coder 看到这篇文章,避免出错。

主要代码为:

    • int  on;
    • on = 1;
    • ret = setsockopt( sock, SOL_SOCKET, SO_REUSEADDR, &on,  sizeof (on) );

  现在我每次用 Ctrl + C 强制结束进程后,用 netstat 和 ps 都还能看到端口在使用中,但运行程序不会出现“ Address already in use” 的错误了,实现了端口的重用。

以下是原文中的第三个隐患--地址使用错误

地址使用错误( EADDRINUSE )

您可以使用 bind API 函数来绑定一个地址(一个接口和一个端口)到一个套接字端点。可以在服务器设置中使用这个函数,以便限制可能有连接到来的接口。也可以在客户端设置中使用这个函数,以便限制应当供出去的连接所使用的接口。 bind 最常见的用法是关联端口号和服务器,并使用通配符地址( INADDR_ANY ),它允许任何接口为到来的连接所使用。

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

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

考虑清单 3 的例子。在绑定地址之前,我以 SO_REUSEADDR 选项调用 setsockopt 。为了允许地址重用,我设置整型参数( on )为 1 (不然,可以设为 0 来禁止地址重用)。


使用 SO_REUSEADDR 套接字选项避免地址使用错误

    • int  sock, ret, on;
    • struct  sockaddr_in servaddr;
    • /* Create a new stream (TCP) socket */
    • sock = socket( AF_INET, SOCK_STREAM, 0 ):
    • /* Enable address reuse */
    • on = 1;
    • ret = setsockopt( sock, SOL_SOCKET, SO_REUSEADDR, &on,  sizeof (on) );
    • /* Allow connections to port 8080 from any available interface */
    • memset( &servaddr, 0,  sizeof (servaddr) );
    • servaddr.sin_family = AF_INET;
    • servaddr.sin_addr.s_addr = htonl( INADDR_ANY );
    • servaddr.sin_port = htons( 45000 );
    • /* Bind to the address (interface/port) */
    • ret = bind( sock, ( struct  sockaddr *)&servaddr,  sizeof (servaddr) );

在应用了 SO_REUSEADDR 选项之后, bind API 函数将允许地址的立即重用。

 

 

参考资料:

Linux 套接字编程中的 5 个隐患

http://www.ibm.com/developerworks/cn/linux/l-sockpit/

达梦的自定义类型和存储过程支持创建同义词,不支持同义词使用? 达梦8的自定义类型和存储过程支持创建同义词,但是通过同义词调用报错,而在oracle上验证没有问题,难道是发现了达梦的bug了?非也非也,详情请见下文 阅读详情

相关推荐

深入解析HAL_UART_Receive_IT:如何高效配置串口中断接收

本文深入解析了STM32 HAL库中`HAL_UART_Receive_IT`函数的工作原理与高效配置方法。该函数并非直接接收数据,而是作为中断接收的启动器和配置器,通过开启相关中断,由`UART_Receive_IT`在后台完成数据搬运。文章详细对比了中断与轮询模式的区别,并提供了不定长数据接收的完整实战流程、常见问题避坑指南及高级应用技巧,帮助开发者构建稳定高效的串口通信。

weixin_29162439的博客 638

tomcat_Socket bind failed: (98) Address already in use

问题描述:启动tomcat时,catalina.out日志输出报错,异常为: java.lang.Exception: Socket bind failed:(98)Address already in use. 服务器端口已经被占用。 解决方案:删掉集群下的tomcat.pid文件,重启即可。 问题原因:tomcat.pid文件记录了当前集群的tomcat配置端口,当该文件存在时,会

qiqizhiyun的专栏 1973

幻尔串口总线舵机控制Python SDK

幻尔串口总线舵机控制Python SDK,可以直接在PC端,不需要借助单片机对舵机进行控制。

daishabby2486的博客 4092

《Linux 套接字编程中的 5 个隐患》

Linux下Socket编程的端口问题( Bind(): Address already in use )转载请注明 本文引用地址 http://blog.youkuaiyun.com/xl_xunzhao/archive/2008/10/23/3130037.aspx  最近在开发一个Linux下的聊天软件,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误:Cannt bind ser

james@BJ的专栏 1320

STM32驱动数码管:从硬件连接到动态显示实现

本文详细介绍了使用STM32单片机驱动数码管的完整流程,从硬件连接到软件实现。内容涵盖共阳/共阴数码管原理、GPIO配置、段码表生成,并重点解析了多位数码管动态显示的核心技术,包括动态扫描原理、消影处理及实战代码,帮助开发者快速掌握这一嵌入式开发基础技能。

p5l2m9n4o6q的博客 575

MTK PE+2.0介绍

  PE+2.0介绍:   1.      PE+2.0的状态机: 2.      升压波形协议及编码规则: PE+2.0软件设计:   在充电器类型为标充且底层电量SOC在1%—95%之间时,开始PE+2.0升压充电器的检测:首先将VBUSreset至5V,之后发送8.5的current pattern再获取此时VBUS电压和8.5V比较,若其与8.5的差值绝对值在0.5之...

raydom07的博客 1万+

部署项目过程中的一些小问题。。。。

1,报错如下 java.lang.Exception: Socket bind failed: [98] Address already in use at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:408) at org.apache.tomcat.util.net.Abstrac

每天积累一点,一年后你会发现,自己变化很大 2843

在linux上本地大模型部署与推理

您的Python脚本(客户端)可能在您的个人电脑上,而模型服务(服务器)在远程Linux服务器上。如果您的服务器有强大的NVIDIA GPU,并且您对性能有更高的要求(例如需要高吞吐量),vLLM是更好的选择。这种方式无需向公网暴露服务器端口,而是通过加密的SSH通道将服务器的端口“映射”到您的本地电脑上。我们将启动一个API服务器,它会加载您指定的模型,并等待您的代码前来调用。如果您直接在SSH窗口运行上面的命令,一旦您关闭窗口,服务就会停止。这是根据您的原始代码修改的版本,适配本地vLLM服务。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 2055

socket.error: [Errno 98] Address already in use的解决方案

参考python官网手册: Running an example several times with too small delay between executions, could lead to this error: socket.error: [Errno 98] Address already in use This is because the previous execution has left the socket in a TIME_WAIT state, and can’t be

ShineRoyal 1053

HFSS线圈仿真避坑指南:从建模到寄生参数分析的完整流程

本文详细介绍了HFSS线圈仿真的完整流程,从精准建模到寄生参数优化,特别针对Ansys Electronics Desktop用户提供实用指南。涵盖线圈几何构建、材料属性配置、端口激励设置及寄生电阻与电感分析等关键步骤,帮助工程师避免常见错误,提升仿真精度与效率。

weixin_29209801的博客 549

Python 爬虫实战:抓取悦动圈跑步爱好者运动轨迹数据,规划健身路线

通过本次 Python 爬虫实战,我们学习了如何使用 Python 抓取悦动圈跑步爱好者的运动轨迹数据,并基于这些数据进行分析和处理,最终规划出健身路线。在这个过程中,我们掌握了requests、BeautifulSoup、pandas和matplotlib等库的基本使用方法,了解了爬虫的基本原理和流程。希望本文能够帮助你更好地理解和应用 Python 爬虫技术,在数据处理和分析领域取得更多的成果。

u014481728的博客 2366

java.lang.Exception: Socket bind failed java.net.BindException: Address already in use: JVM_Bind

废话不多少说,一般出现这种情况基本都是端口被占用了导致的,至于端口被占用的原因,又可能是服务已经起过一次,还有就是别的服务已经占用了该端口。 两种解决方案: 第一种,kill掉占用的端口服务; <p> 1.查看指定端口的占用情况 netstat -aon|findstr "8080" 2.查看PID对应的进程 tasklist|findstr "PID" 3.结束该进...

成长的脚印 720

[工作流节点10] 获取多条数据并循环执行 —— 明道云批处理自动化实战

本文系统介绍了明道云工作流中"获取多条数据+循环执行"的批处理功能。该功能通过筛选数据集合并逐条处理,适用于批量通知、数据更新等场景。文章详细解析了功能配置方法,包括数据筛选、循环设置和异常处理,并提供了合同到期提醒等典型应用案例。同时强调了数据量控制、分批处理、错误处理等优化策略,帮助用户实现高效批量自动化。这一功能组合能将业务从单条处理升级为批量驱动,显著提升工作效率。

每日出拳老爷子的博客 455

bind:address already in use的深刻教训以及解决办法

今天在linux下,编写了一个简单的回射客户/服务器(就是客户机从控制台标准输入并发送数据,服务端接受数据,但是不对数据进行处理,然后将数据返回,交由客户机标准输出),然后遇到了一些问题,郁闷了好长时间,然后就想着将这些东西写下来,跟大家分享分享 1,  客户端和服务端到底那个是先退出的??这个有什么区别吗??(死循环) 2,  为什么有的时候bind:address al...

lizhengze1117的博客 5万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linux 套接字编程中 bind 错误:bind fail:Address already in use 解决方法

最近在学Linux 网络编程,调试TCP并发服务器时遇到一个问题,当我连接上一个或多个客户端后,用 CTRL+C 关闭进程后,重新打开进程就发生错误了:bind fail:Address already in use 地址被占用??? 开始我以为是套接字描述符未关闭,添加代码在发生错误时关闭掉套接字描述符还是不行。 上网查了才发现是原来是套接字状态未配置,IBM官网上有较为详细的解释:L

小飞的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

linux下遇到bind: Address already in use解决办法

第一种 方法: 在linux下运行一个服务器程序 结果没操作好 蹦出bind: Address already in use的问题 解决办法: 杀死进程 重启 指令:netstat -nap 查看程序运行的pid kill -9 pid 即可 重新启动服务器程序 解决问题 第二种方法: 出现这个问题的原因是:给某一进程分配端口,由于没有释放这一端口,导致Addres...

aa804738534的博客 6553

socket编程注意的地方---bind socket error: Address already in use

在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误: Bind error: Address already in use 虽然用Ctrl+C强制结束了进程,但错误依然存在,用netstat -an |grep 5120和ps aux |grep 5120都还能看到刚才用Ctrl+C“强制结束”了的进程,端口还是使用中,只好每次用kil

chen 8448

socket编程小问题:地址已经被使用——Address already in use

转自:https://www.cnblogs.com/computer1-2-3/p/6875367.html 很多socket编程的初学者可能会遇到这样的问题:如果先ctrl+c结束服务器端程序的话,再次启动服务器就会出现Address already in use这个错误,或者你的程序在正常关闭服务器端socket后还是有这个问题。 然后你开始迷惑了,难道是忘记将socket给关闭了,或是关...

qq_40443457的博客 2515

Qt:The bound address is already in use解决及QTcpServer如何停止监听

The bound address is already in use解决 Qt tcp服务器重复监听同个端口时会出错:The bound address is already in use // maybe occur error:The bound address is already in use QTcpServer tcp1, tcp2; tcp1.setMaxPendingCon...

楷尘·极客 6604

Linux下Socket编程的端口(复用)问题( Bind error: Address already in use )

原文地址:https://www.cnblogs.com/hnrainll/archive/2011/10/14/2211150.html 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误: Bind error: Address already in use 虽然用Ctrl+C强制结束了进程,但错误依然存在,用netstat -an |grep 5120...

Sunshine_AA的博客 1873
上一篇: 挺实用的---测试sendto 的速率--精确microseconds
下一篇: UDP通讯方式及编程实现步骤
伊娃码力
博客等级 码龄16年 52粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值