gpt4 book ai didi

linux - 客户端能否确定服务器是否具有 accept() 的 unix 套接字?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:40 25 4
gpt4 key购买 nike

我正在处理一个有问题的服务器,它有时会无法接受()连接(但保持其监听套接字打开)。这是在带有 unix 域套接字的 Linux 上。

目前检测到这一点的唯一方法是在发送一堆数据后,缓冲区填满并阻塞,并且服务器不发送任何回复。这种事后很久的故障模式很难与其他错误区分开来 - 服务器可能由于其他原因没有响应。

特别是对于 unix 域套接字,内核似乎应该知道是否发生了 accept();有什么办法可以找出来吗?客户端能否阻止直到 accept() 以某种方式发生,或者至少检查它是否发生?

这只是为了调试目的,所以它可能有点难看。

最佳答案

我会说答案是改变协议(protocol),让服务器先说话(像 SMTP,不像 HTTP)

内核在 accept() 系统调用之前就已经接受了套接字;如果它永远不会到达,那么套接字将处于等待状态。无法将此与服务器接受连接但不说话区分开来。这就是 BSD 套接字一直以来的工作方式。

关于linux - 客户端能否确定服务器是否具有 accept() 的 unix 套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2746964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com