c++ - 如何检测之前连接的 SSL/TCP 套接字上的互联网断开连接?

标签 c++ c sockets ssl tcp

<分区>

我有一个线程在基于select()SSL_read() 上阻塞。主线程在需要时使用 SSL_write() 写入。在单元测试的过程中,我发现了一个问题:

  • 客户端 TCP 套接字 connect() 到 SSL(TLS) 上的服务器
  • 一段时间后,禁用互联网
  • 在客户端 TCP/SSL 套接字上写入一些数据

即使没有互联网,SSL_write() 也会返回正确的写入字节数,而不是 0 或某些错误。这种互联网断开是任意的,既不太高也不太低。

我的期望是,每当互联网断开连接时,套接字应该生成一些有趣的事件,这是可检测的,我将停止套接字 + SSL 连接。
如果我必须建立一些客户端-服务器手工协议(protocol),那么这是可能的。

实现此类互联网检测的最佳方法是什么?
期待一个具有更少 CPU 周期和更少客户端服务器通信的解决方案。我敢肯定,这不是一个非常特殊的问题,因此之前肯定已经解决了。

[附:客户端套接字在Android和iOS等移动平台上打开,但我想知道一个通​​用的解决方案。]

最佳答案

这是套接字的普遍问题。您不能与他们进行认证交付。如果您想知道对方是否确实可达,您必须自己实现某种心跳。

通常成功写入套接字并不表示另一端的接收者可用。

关于c++ - 如何检测之前连接的 SSL/TCP 套接字上的互联网断开连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37116838/

相关文章:

C++ LPCTSTR 到 char*

python - 在 f2py 中设置 fortran 编译器

c - 我想将 stdin 解释为二进制文件。为什么 freopen 在 Windows 上失败?

java - 使用套接字的客户端-服务器-客户端通信

Python 客户端-服务器脚本挂起,直到我按 [enter]

python - 如何在 python 服务器中的某个时间间隔后调用函数?

c++ - C++11/1y 中的范围/切片?

c++ - 从 Lua 调用事件程序中的 C++ 函数

c++ - 何时调用 C++ 析构函数?

C程序不会打印链表中的节点