- RAII не выполняет деструктор при вызове
exit
. ПоэтомуWSACleanup
не запускается. В чем проблема? Я обнаружил, чтоlibnet
используетWSAStartup
без каких-либоWSACleanup
, почему? WSAStartup
может вызывать много раз в одном процессе, так как же обеспечить достаточностьWSACleanup
?- Как легко и элегантно использовать
WSAStartup
иWSACleanup
? - Кроме того, я написал этот тестовый код для теста
WSAStartup
безWSAClean
, не обнаружил каких-либо отклонений (рост памяти или сбой...)
код:
int main(int argc, char *argv[])
{
int res;
while (1) {
WSADATA wsadata;
res = WSAStartup(0x0202, &wsadata);
printf("WSAStartup 1 times:%d\n", res);
if (res != 0) {
printf("WSAStartup error:%d\n", WSAGetLastError());
exit(1);
}
res = WSAStartup(0x0202, &wsadata);
printf("WSAStartup 2 times:%d\n", res);
if (res != 0) {
printf("WSAStartup error:%d\n", WSAGetLastError());
exit(1);
}
}
return 0;
}