客户端 socket 断开后 服务器端系统如何处理?

ets2008 2009-04-26 11:26:35

客户端主动断开后, 服务器端因为没有运行 send 或 recv ,检测不到socket的断开,所以没有执行close()操作, 请问,服务器的的系统会回收这个socket fd 吗?谢谢,linux系统
...全文
248 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你的服务器的子线程阻塞在recv 的撒,socket断开,你的客户端会自动发一个消息通知server,然后server就会有后续动作的。
ets2008 2009-04-26
  • 打赏
  • 举报
回复
谢谢,我明白了,等服务器处理完数据后,就发送,不管发送成功与否,都要clos()。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ets2008 的回复:]
没有运行 recv 函数,服务器将数据处理完后,找到socket fd 再执行 recv, 并没有阻塞在recv 。
[/Quote]

你不阻塞,那就是用类似于select的复用咯。总之不管你怎么做,对面发包过来,你总得接收,所以可以收到client断开的消息。
ets2008 2009-04-26
  • 打赏
  • 举报
回复
使用了消息队列,因为线程id在不同的进程可能会重复,所以没有使用多线程;
ets2008 2009-04-26
  • 打赏
  • 举报
回复
没有运行 recv 函数,服务器将数据处理完后,找到socket fd 再执行 recv, 并没有阻塞在recv 。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧