【发布时间】:2011-06-09 19:20:19
【问题描述】:
我正在为一个更大的软件开发一个小型服务器循环,但它没有按我的意愿工作。
当用户输入“.quit”时,我希望软件停止这个线程服务器循环:
try {
while (true) {
acceptor.accept(socket);
const size_t buffersize = 1024;
char data[buffersize+1] = {0};
data[socket.read_some(boost::asio::buffer(data,buffersize))] = '\0'; // Write data & place terminator
boost::thread asyncWriting(boost::bind( &myClass::writeToFile, this ));
socket.close();
}
} catch(const boost::system::system_error& e) {
cout << "Boost System Error: " << e.what() << endl;
}
我通过以下方式启动线程:
serverThread = boost::shared_ptr<boost::thread>( new boost::thread(boost::bind( &myClass::startServer, this )) );
但是我在停止“服务器”时遇到了问题。无论我是中断线程、关闭套接字和/或接受器还是只是中断程序 Boost 都会抛出错误:
Bad file descriptor
它不会每次都发生,但经常发生,我想解决这个问题,而不是忽略它。
你能帮我如何关闭它clean吗?
【问题讨论】:
-
如果您可以附加一个调试器并告诉我们异常是在哪里引发的,那将会很有帮助。有多种 asio 方法可以抛出错误代码为
boost::system::errc::bad_file_descriptor的boost::system::system_error。
标签: c++ boost-asio boost-thread