gpt4 book ai didi

c++ - 在 winsock recv() 方法上调用了 abort()

转载 作者:太空狗 更新时间:2023-10-29 21:42:50 25 4
gpt4 key购买 nike

我正在尝试从我正在构建的服务器接收消息。

在某个时刻,当客户端连接到服务器时,我启动了一个持续运行的接收线程。我从这段代码开始:

std::thread receiveThread(&NetworkingLib::Base::Receive, this);

它是从 Receive() 方法所在的同一类中的方法调用的。

现在它确实进入了 Receive() 方法,但是当调用 recv() 方法(Winsock 方法)时它崩溃了。

if (ConnectSocket != INVALID_SOCKET)
{
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
...
}

不过,所有这些变量都包含一个工作值。错误说:

R6010 - abort() has been called.

我不知道如何解决这个问题或可能是什么问题。

编辑:

这里有一些额外的代码来展示套接字是如何创建的等等。 (我省略了大部分错误检查)

recvbuf和recvbuf声明如下:

int recvbuflen;
char recvbuf[512];

之后在构造函数中,recvbuflen声明如下:

Base::Base(void):
recvbuflen(512)
{
...
}

下面是我创建套接字对象的方式:

// Create a SOCKET to connect to the server
ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);

// Connect to server.
iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);

完成此操作后,我启动接收线程。 (本文第一段代码)

最佳答案

打电话

receiveThread.detach();

创建线程后。否则它会在作用域退出时被删除。

关于c++ - 在 winsock recv() 方法上调用了 abort(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24700631/

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