Lib
QOLを高める
network.cpp
Go to the documentation of this file.
1 #include "stdafx.h"
2 #include "include/network.h"
3 #include "include/exceptions.h"
4 #include "include/debug.h"
5 #include <WinSock2.h>
6 
7 #pragma comment(lib, "ws2_32.lib")
8 
9 namespace yappy {
10 namespace network {
11 
12 using error::WinSockError;
13 
14 void initialize()
15 {
16  int ret;
17  WSADATA wsaData;
18 
19  ret = ::WSAStartup(MAKEWORD(2, 2), &wsaData);
20  if (ret != 0) {
21  throw WinSockError("WSAStartup() failed", ret);
22  }
23 
24  if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
25  finalize();
26  throw WinSockError("WSAStartup() failed", ret);
27  }
28 
29  debug::writef(L"WinSock2 initialized");
30  debug::writef(L"wVersion = %d.%d", LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion));
31  debug::writef(L"wHighVersion = %d.%d", LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion));
32  debug::writef(L"szDescription = %s", util::utf82wc(wsaData.szDescription).get());
33  debug::writef(L"szSystemStatus = %s", util::utf82wc(wsaData.szSystemStatus).get());
34 }
35 
36 void finalize() noexcept
37 {
38  int ret = ::WSACleanup();
39  if (ret != 0) {
40  int err = ::WSAGetLastError();
41  debug::writeLine(WinSockError("WSACleanup() failed", err).what());
42  }
43 }
44 
45 }
46 }
Debug utilities.
void writef(const wchar_t *fmt,...) noexcept
Write debug message using format string like printf.
Definition: debug.cpp:103
Definition: config.cpp:6
void writeLine(const wchar_t *str=L"") noexcept
Write debug string and new line.
Definition: debug.h:64
std::unique_ptr< wchar_t[]> utf82wc(const char *in)
UTF-8 to wide char.
Definition: util.h:117
void initialize()
Definition: network.cpp:14
void finalize() noexcept
Definition: network.cpp:36