Получить информацию о Winsock.dll, который используется на Вашем ПК можно анализируя стртуктуру WSADATA:
typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; } WSADATA, FAR * LPWSADATA;
wVersion - версия поддержка которой ожидается. Ведь можно поддерживать и младшую версию. wHighVersion - максимальная версия, с которой можно работать. Нормально когда они совпадают хотя и не обязаны. szDescription - текстовая строка с описанием. szSystemStatus - опять текстовая строка с описанием, но в приложении для типа операционной среды. С остальными сложнее, приложение должно проигнорировать iMaxsockets, iMaxUdpDg, и lpVendorInfo области в WSAData, если величина в wVersion после успешного вызова на WSAStartup в версии 2.
Я внес в код инициализации WinSock изменения:
BOOL CSeverWinSock::StartWinSock() { if (WSAStartup(WINSOCK_VERSION, &wsaData)) { AfxMessageBox("winsock not bi initialized !"); LogsWrite("winsock not bi initialized !"); WSACleanup(); return FALSE; } LogsWrite("Запуск WinSock"); LogsWriteNotTime("Информация о WinSock.DLL"); LogsWriteNotTime(wsaData.szDescription); LogsWriteNotTime(wsaData.szSystemStatus); return TRUE; }
Появилась функция LogsWriteNotTime, которая пишет в log файл без указания времени. Вот она:
void CSeverWinSock::LogsWriteNotTime(CString writeString) { if (TestLogFile) cLogFile.write(writeString); }
Вносим пояснения в при получении имени хоста:
BOOL CSeverWinSock::SocketGetHostName() { //...... LogsWriteNotTime("Получаем имя хоста"); LogsWrite(chInfo); //...... }
Дополнительная информация о создании сокета:
BOOL CSeverWinSock::CreateSocket() { //...... LogsWrite("Создали сокет"); CString temp; temp.Format(" %i", PORT_ADDR); LogsWriteNotTime("Порт " + temp); LogsWriteNotTime("Протокол по умолчанию "); //...... }
Так же я добавил фиксацию времени обращения клиента:
afx_msg LRESULT CHTTPServerView::OnServerAccept(WPARAM wParam, LPARAM lParam) { //...... HTTPServer.LogsWrite("Запрос соединение клиентом"); //...... closesocket(HTTPServer.clientsocket); HTTPServer.LogsWrite("Отсоединение клиента"); //...... }
Конечно расширять информативность лога надо и дальше, но пока хватит :-) Вот как он уже выглядит !!!
09 : 45 :03 Запуск WinSock Информация о WinSock.DLL Microsoft wsock32.dll, ver2.2, 32bit of Apr 28 1998, at 19:33:24. On Win95. Получаем имя хоста 09 : 45 :03 Jana 09 : 45 :03 Создали сокет Порт 80 Протокол по умолчанию 09 : 45 :03 bind 09 : 45 :03 WSAAsyncSelect .......