Boost.asio 超時處理


1.5s后關閉socket

demo

// overtimeClient.cpp : 此文件包含 "main" 函數。程序執行將在此處開始並結束。
//

#include "pch.h"
#define BOOST_ASIO_DISABLE_STD_CHRONO
#include <iostream>
#include <boost/asio.hpp>
#include <boost/chrono.hpp>
#include <boost/asio/steady_timer.hpp>
using namespace boost::asio;

int main()
{
    io_service io;
    ip::tcp::socket sock(io);
    ip::tcp::endpoint ep(ip::address::from_string("127.0.0.1"), 6688);

    sock.async_connect(ep, [](const boost::system::error_code&) {});    //異步連接

    steady_timer t(io);
    t.expires_from_now(boost::chrono::milliseconds(5000));    //開始計時

    t.async_wait(    //異步等待超時
        [&](const boost::system::error_code&) {    //使用lambda表達式
        std::cout << "time expired." << std::endl;
        sock.close();    //關閉socket
    }
    );

    std::vector<char> str(sock.available() + 1, 0);
    boost::system::error_code ec;
    for (;;)
    {
        sock.read_some(buffer(str), ec);
        if (ec)
        {
            break;
        }
        std::cout << &str[0];
    }

    std::cout << "syschronous client." << std::endl;
    std::cout << "syschronous client." << std::endl;
    std::cout << "syschronous client." << std::endl;
    std::cout << "syschronous client." << std::endl;
    std::cout << "syschronous client." << std::endl;

    io.run();    //進入異步事件循環
    getchar();
    std::cout << "Hello World!\n"; 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM