c++ - 提升 ASIO : How can a server know if a client is still connected?

标签 c++ tcp boost-asio

我正在为服务器/客户端应用程序使用 boost::asio。服务器一次只接受一个连接。我想知道服务器验证客户端是否仍处于连接状态的最佳方法是什么。

这样做的目的是我想知道客户端是否崩溃了,这样我就可以重新开始监听新的连接尝试。

最佳答案

在我的应用程序中,我使用了以下标志,当客户端断开连接时,我的读取就出来了。 如果在您的应用程序中,请尝试一下。连接后立即应用此标志。

在我的例子中 skt_TCP 是类型 boost::asio::ip::tcp::socket

int32_t accept_server_socket = skt_TCP.native_handle();

int32_t timeout = 8;
int32_t cnt = 2;
int32_t intverval = 2;

// Added Keepalive flag
boost::asio::socket_base::keep_alive opt_keep_alive(true);
skt_TCP.set_option(opt_keep_alive);
setsockopt(accept_server_socket, SOL_TCP, TCP_KEEPIDLE, &timeout, sizeof(timeout));
setsockopt(accept_server_socket, SOL_TCP, TCP_KEEPCNT, &cnt, sizeof(cnt));
setsockopt(accept_server_socket, SOL_TCP, TCP_KEEPINTVL, &intverval, sizeof(intverval));

关于c++ - 提升 ASIO : How can a server know if a client is still connected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16568672/

相关文章:

c++ - syntax::function_name 在 C++ 中是什么意思?

c++ - 如何从原始 Ptr 增加共享 Ptr 的计数

c++ - 提升 this_thread interruptation_point not captured

c++ - 使用异步调用与在线程中使用同步调用相同吗?

c++ - 何时调用 SSL_set_verify 与 SSL_CTX_set_verify

c# - 我可以 PInvoke C++ 可执行文件但不能共享库

c++ - 一个数组来保存 C++ 中的任何对象?

Scala - 使用 Akka 的 TCP 数据包帧

c - 如果我只想接收 C/TCP 中的数据,是否需要 connect()?

tcp - netty - 在 TCP 服务器上配置超时