C++ boost::asio-can';设置保留值
我从boost示例中复制了聊天示例C++ boost::asio-can';设置保留值,c++,winapi,boost,tcp,asio,C++,Winapi,Boost,Tcp,Asio,我从boost示例中复制了聊天示例 服务器代码: chat_message.hpp: 客户端代码: 在chat\u server.cpp中,我在chat\u room::leave中添加了一个cout,以便在客户离开时收到通知。在聊天室服务器中,我试图根据以下内容配置TCP keepalive: //我已经添加的附加内容 #包括 #包括 #包括 #包括 #包括 // ---- 类聊天服务器{ 公众: 聊天服务器(boost::asio::io_服务和io_服务, 常量tcp::端点和端点)
- 服务器代码:
- chat_message.hpp:
- 客户端代码:
chat\u server.cpp
中,我在chat\u room::leave
中添加了一个cout
,以便在客户离开时收到通知。在聊天室服务器中,我试图根据以下内容配置TCP keepalive:
//我已经添加的附加内容
#包括
#包括
#包括
#包括
#包括
// ----
类聊天服务器{
公众:
聊天服务器(boost::asio::io_服务和io_服务,
常量tcp::端点和端点)
:接受者(io_服务,端点),
插座(io_服务){
你接受吗;
}
私人:
无效不接受{
接受程序异步接受(套接字),
[this](boost::system::error_code ec){
如果(!ec){
无符号长val=1;
int res=setsockopt(socket.native_handle(),SOL_socket,SO_KEEPALIVE,(char*)&val,sizeof val);
if(res)std::cout
// additional includes that I have added
#include <winsock2.h>
#include <ws2tcpip.h>
#include <ws2spi.h>
#include <mstcpip.h>
#include <windows.h>
// ----
class chat_server {
public:
chat_server(boost::asio::io_service& io_service,
const tcp::endpoint& endpoint)
: acceptor_(io_service, endpoint),
socket_(io_service) {
do_accept();
}
private:
void do_accept() {
acceptor_.async_accept(socket_,
[this](boost::system::error_code ec) {
if(!ec) {
unsigned long val = 1;
int res = setsockopt(socket_.native_handle(), SOL_SOCKET, SO_KEEPALIVE, (char*) &val, sizeof val);
if(res) std::cout << "Can't set sockopt!" << std::endl;
tcp_keepalive alive;
alive.onoff = TRUE;
alive.keepalivetime = 1000;
alive.keepaliveinterval = 1000;
DWORD bytes_ret = 0;
res = WSAIoctl(socket_.native_handle(), SIO_KEEPALIVE_VALS, &alive, sizeof(alive), NULL, 0,
&bytes_ret, NULL, NULL);
if(res) std::cout << "Can't set TCP keepalive!" << std::endl;
std::make_shared<chat_session>(std::move(socket_), room_)->start();
}
do_accept();
});
}
tcp::acceptor acceptor_;
tcp::socket socket_;
chat_room room_;
};