首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WSAStartup与RAII

WSAStartup与RAII
EN

Stack Overflow用户
提问于 2015-03-13 05:52:01
回答 4查看 940关注 0票数 1
  1. 当调用exit.So WSACleanup不运行时,RAII不执行析构函数。有什么问题吗?我发现libnet use WSAStartup没有任何WSACleanup,为什么?
  2. WSAStartup可以在一个进程中多次调用,那么如何确保足够的WSACleanup
  3. 如何轻松、优雅地使用WSAStartupWSACleanup
  4. 另外,我为没有WSAStartup的测试WSAClean编写了这个测试代码,没有发现任何异常(内存的增长或崩溃.)

代码:

代码语言:javascript
复制
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;
}
EN

回答 4

Stack Overflow用户

发布于 2015-03-13 06:01:12

1) exit()是每个RAII的问题,而不仅仅是套接字。打开文件记忆..。正确的解决方案是避免exit()

( 2+3)调用与WSAStartup一样多的WSACleanup。我想您想要编写一个套接字类,每个对象只有一个连接,只需在构造函数中调用WSAStartup,在析构函数中调用WSACleanup即可。

这两种方法都在内部使用一个呼叫计数器,它们处理多个呼叫而没有问题。

票数 1
EN

Stack Overflow用户

发布于 2015-03-13 06:00:48

在我看来,只有在堆栈上分配对象时,exit才会销毁该对象,无论是静态的还是全局的。不能使用new分配它。对于new,必须显式删除对象。

良好的实践是,应用程序启动时必须调用WSAStartup,应用程序结束时必须调用WSACleanup。因此,您可以在其构造函数和析构函数中定义执行此任务的类,并定义该类的全局对象。这个班会处理这件事的。

您必须有充分的理由多次初始化WinSock。否则,只进行一次初始化,这是您可以轻松完成的。

票数 0
EN

Stack Overflow用户

发布于 2015-03-13 11:36:17

当调用exit.So WSACleanup不运行时,RAII不会执行析构函数。有什么问题吗?

IME,根本没有。操作系统可以在进程终止时自行清理--这并不愚蠢。

我发现libnet使用没有任何WSAStartup的WSACleanup,为什么?

库设计人员理解上面的内容--操作系统将清理,就像强制进程终止va期间所做的那样。任务经理。

WSAStartup可以在一个进程中多次调用,那么如何确保足够的WSACleanup?

你为什么要这么做?刚开始的时候就叫一次吧。工作完成了。

如何轻松、优雅地使用WSAStartup和WSACleanup?

启动时给WSAStartup打一次电话。如果可以的话,在退出时打电话给WSACleanup (如果你喜欢,或者如果它让你感觉更好:)。

另外,我为没有WSAStartup的测试WSAClean编写了这个测试代码,没有发现任何异常(内存的增长或崩溃.)

该操作系统清理,就像它做的线程,文件,内存等。

如果一个通用桌面操作系统在进程终止时没有处理分配的资源,那么它显然是不可用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29025713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档