Opened 5 years ago
#13086 new Support Requests
Exception Throw -> { boost::asio::ip::tcp::aceptor * acceptor->open(); }
| Reported by: | Owned by: | chris_kohlhoff | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | asio |
| Version: | Boost 1.63.0 | Severity: | Problem |
| Keywords: | Cc: |
Description
asio.h
#include "boost/asio.hpp"
struct SNetGlobal
{
static boost::asio::io_service * GetStcIOService();
static bool RunIOServiceInThreads(int nCountThr = 1);
};
asio.cpp
#include "asio.h"
#include <vector>
#include <thread>
static boost::asio::io_service * s_io_service = NULL;
static std::vector<std::thread> s_thread_pool;
io_service * SNetGlobal::GetStcIOService()
{
if (!s_io_service)
{
s_io_service = new io_service;
}
return s_io_service;
}
bool SNetGlobal::RunIOServiceInThreads(int nCountThr)
{
while (nCountThr--)
{
s_thread_pool.emplace_back([=] { s_io_service->run(); });
}
return true;
}
listener.h
class CUCListener
{
public:
void Start();
void OnAccept(const boost::system::error_code & ec);
private:
tcp::acceptor * m_pAcceptor;
tcp::socket * m_pSocket;
};
listener.cpp
#include "asio.h"
#include "listener.h"
void CUCListener ::Start()
{
tcp::endpoint endpoint(tcp::v4(), 1974);
m_pAcceptor = new tcp::aceptor(*SNetGlobal::GetStcIOService());
m_pAcceptor->open(endpoint.protocol());
m_pAcceptor->set_option(tcp::acceptor::reuse_address(true));
m_pAcceptor->bind(endpoint);
m_pAcceptor->listen();
m_pAcceptor->async_accept(*m_pSocket, boost::bind(&CUCListener::OnAccept, this, boost::asio::placeholders::error));
SNetGlobal::RunIOServiceInThreads();
}
void CUCListener::OnAccept(const boost::system::error_code & ec)
{
std::cout << "Accept Success" << std::endl;
}
Hi, sometimes throw exception and function CUCListener::OnAccept not called when connected
socket_ops.ipp
socket_type socket(int af, int type, int protocol,
boost::system::error_code& ec)
{
clear_last_error();
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
socket_type s = error_wrapper(::WSASocketW(af, type, protocol, 0, 0,
WSA_FLAG_OVERLAPPED), ec); // Exception Throw
if (s == invalid_socket)
return s;
...
}
Note:
See TracTickets
for help on using tickets.
