【发布时间】:2014-11-14 11:56:54
【问题描述】:
我已经使用 boost 实现了一个 SocketServer。此 SocketServer 的工作原理如下:
- 接受一定时间的连接
- 超时后停止处理套接字
这是我的代码:
ServerSocket::ServerSocket(unsigned int port)
{
_io_service.reset(new boost::asio::io_service()) ;
_endpoint.reset(new boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port));
_acceptor.reset(new boost::asio::ip::tcp::acceptor(*_io_service, *_endpoint)) ;
_newConnection = false;
}
bool ServerSocket::accept(boost::asio::ip::tcp::socket& socket, int timeout)
{
_newConnection = false;
_acceptor->async_accept(socket, boost::bind(&ServerSocket::handleAccept, this, &socket));
_io_service->reset();
if (timeout > 0)
{
int incrementation = 1;
int time_spent = 0;
while (time_spent < timeout && !_io_service->poll_one())
{
time_spent += incrementation;
sleep(incrementation);
}
}
else
{
_io_service->run_one();
}
if (!_newConnection)
{
_acceptor->cancel();
}
return _newConnection;
}
void ServerSocket::handleAccept(boost::asio::ip::tcp::socket* pSocket)
{
_newConnection = true;
};
我的问题如下:当我用超时和套接字 A 调用 accept() 时。如果达到超时,我用新的套接字 B 再次调用它,如果此时 accept() 有效,我处理 A而不是 B。
如果缺少信息,请告诉我。
【问题讨论】:
-
你的套接字类在哪里?你为什么调用io_service->reset()?如果您想“单步执行”服务,只需运行同步方法而不是异步方法
-
我不想使用同步方法,因为我希望能够随时中断我的服务器