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
DLL を編集せずに、使用する前に Windows システムで正しく初期化されていることを確認する方法はありますか?