Linux close(0)会发生什么 记一次socket accept函数返回0 Bad file descriptor

在实现RTSP服务器时遇到一个问题,当使用TCP协议时,关闭并重新打开播放端会导致服务端accept返回0,错误码为9(Badfiledescriptor)。问题源代码中执行了close(0),在TCP情况下,rtp_fd和rtcp_fd的值都为0,影响了程序运行。注释掉相关代码或避免关闭标准输入流可解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过程是这样的 在写rtsp服务器的时候 accept接受从客户端来的请求

当协议是udp的时候 播放端可以正常关闭 在打开 没问题

但是当协议是tcp的时候 播放端第一次打开之后 关闭 在打开  通过log发现 服务端的accept会返回0

代码如上 log如下 client_fd返回值为0  errno =9 错误表示Bad file descriptor

找了很久也没找到原因  后开没办法 一步步注释 代码  

最后发现问题的原因是  在下面的代码  如果注释掉 就会出现这样的问题 

 如果改成如下就没问题 后来通过加log发现 如果是tcp的话  rtp_fd 和 rtcp_fd 的值 都是0 

也就是 我们在程序中执行了close(0)这个操作 

 

 借用别的博主的一张图 

 

 

 

0表示标准输入流 程序中直接执行close(0)会导致程序出现各种奇奇怪怪的问题 各位可以直接在自己的程序中加入这句试试 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QMCY_jason

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值