Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::asio-can';设置保留值_C++_Winapi_Boost_Tcp_Asio - Fatal编程技术网

C++ boost::asio-can';设置保留值

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::端点和端点)

我从boost示例中复制了聊天示例

  • 服务器代码:
  • 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_;
};