我正在为运行 Windows 7 Embedded 的系统开发程序。该程序使用boost::asio
套接字在 UDP 和 TCP 套接字上进行通信(它充当 DHCP 服务器,由 RESTful 接口控制)。
通常它工作正常。但是,有时它不会正确初始化并且不会响应任何 DHCP 或 HTTP 消息。我怀疑这是因为程序在底层Winsock
准备好之前就已经启动了。在使用下面的代码创建和套接字 Winsock
之前,我天真地尝试等待初始化:boost::asio::io_service
WSADATA wsaData;
while (WSAStartup(MAKEWORD(2,2), &wsaData))
{
BOOST_LOG_TRIVIAL(error) << "WSAStartup failed, waiting...";
boost::this_thread::sleep_for(COMMS_DELAY_PERIOD);
}
但我现在意识到在 Windows 系统上调用 main之前boost::asio
已初始化。请参阅以下代码:winsock_init.hpp
// Static variable to ensure that winsock is initialised before main, and
// therefore before any other threads can get started.
static const winsock_init<>& winsock_init_instance = winsock_init<>(false);
有没有办法确保asio
在使用它之前在 Windows 系统中正确初始化,而不用编辑 DLL?