gpt4 book ai didi

php - TCP 套接字是否持久?

转载 作者:可可西里 更新时间:2023-11-01 02:34:40 26 4
gpt4 key购买 nike

我在 Raspberry Pi3 上运行的 c++ 客户端和在 Centos7 上运行的 ReactPHP 服务器之间遇到套接字中断。请看以下内容:

  1. 客户端在端口 1337 上使用 TLS over TCP 创建到服务器的套接字连接。
  2. 客户端能够向服务器写入数据。
  3. 服务器能够向客户端写入数据。
  4. Tshark 在两台机器上运行,只有端口 1337 的过滤器,并且看到了这个初始通信。
  5. 在接下来的一个小时内没有发生通信,两台机器上的 Tshark 确认没有发生通信。
  6. 客户端或服务器均未收到关闭的连接,并认为连接仍处于打开状态。
  7. 然后服务器尝试向客户端写入更多数据,Tshark 看到服务器线路上的传输,但 Tshark 没有看到客户端线路上的传输,显然客户端没有响应。
  8. 如果客户端守护进程随后关闭,服务器会检测到连接已关闭。
  9. 如果随后关闭服务器守护程序而不是客户端守护程序,则客户端不会感觉到连接已关闭。

php.ini 显示 default_socket_timeout 为 60 秒,更改该值似乎没有任何影响。

是什么原因造成的,我该如何预防?

谢谢

最佳答案

您是否尝试过在您的客户端套接字上设置 SO_KEEPALIVE 选项?

这里有一些关于它如何工作的细节,以及为什么你的连接可能只在一侧失效。 http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html

用法:

char val = 1;    
setsockopt(my_socket, SOL_SOCKET, SO_KEEPALIVE, &val, 1);

关于php - TCP 套接字是否持久?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44485264/

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