gpt4 book ai didi

c++ - VC11 Winsock 应用程序不会关闭

转载 作者:太空宇宙 更新时间:2023-11-04 14:13:28 26 4
gpt4 key购买 nike

我有一个看似不会关闭的 winsock 应用程序的有趣场景。以下代码足以完全重现该问题:

#include "stdafx.h"

#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")

#include <WS2tcpip.h>
#include <MSTcpIP.h>
#include <ws2ipdef.h>

#include <cstdio>
#include <iostream>

using namespace std;

int main() {
WSAData wsaStartup;
WSAStartup(MAKEWORD(2, 2), &wsaStartup);

SOCKET s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);

addrinfo *result;
addrinfo hint = { 0 };
hint.ai_family = AF_INET6;

int error = getaddrinfo("localhost", "45000", &hint, &result);

if (error || !result) {
cout << "Unable to resolve host. " << WSAGetLastError() << endl;
return 1;
}

error = connect(s, result->ai_addr, result->ai_addrlen);

if (error == SOCKET_ERROR) {
cout << "Unable to connect to host. " << WSAGetLastError() << endl;
} else {
cout << "Connection successful." << endl;
}

freeaddrinfo(result);
closesocket(s);
WSACleanup();
return 0;
}

我花了很多时间试图追踪这个问题。似乎 getaddrinfo 和 connect 都产生了一个挂起的 nt 线程,并阻止了应用程序终止。

我在这里更改的唯一重要的编译器选项是:Linker->Advanced->EntryPoint,其中我指定了“main”。如果我摆脱那个编译器选项,并将主要签名更改为:

int _tmain(int argc, _TCHAR* argv[])

似乎一切正常。在我的用例中,我可以使用上述 _tmain 函数,但我想知道是否有人知道在关闭应用程序的 _tmain 函数幕后发生了什么魔法。

最佳答案

How do I correctly set the entry point for an exe in Visual Studio?

也许您需要为 main() 提供正确的签名以匹配运行时的预期。

关于c++ - VC11 Winsock 应用程序不会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13076588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com