gpt4 book ai didi

c++ - 虚幻引擎 4 : Recv function would keep blocking when TCP server shutdown

转载 作者:行者123 更新时间:2023-11-28 05:39:45 24 4
gpt4 key购买 nike

我在连接到 tcp 服务器的客户端使用了一个阻塞式 FSocket,如果没有来自服务器的消息,套接字线程将阻塞在函数 FScoket::Recv(),如果 TCP 服务器关闭,套接字线程仍然阻塞在这个函数中。但是当使用BSD Socket API的blocking socket时,当TCP服务器关闭时线程会从recv函数返回并返回errno,所以是缺陷FSocket 的?

uint32 HRecvThread::Run()
{
uint8* recv_buf = new uint8[RECV_BUF_SIZE];

uint8* const recv_buf_head = recv_buf;
int readLenSeq = 0;

while (Started)
{
//if (TcpClient->Connected() && ClientSocket->GetConnectionState() != SCS_Connected)
//{
// // server disconnected
// TcpClient->SetConnected(false);
// break;
//}

int32 bytesRead = 0;
//because use blocking socket, so thread would block in Recv function if have no message
ClientSocket->Recv(recv_buf, readLenSeq, bytesRead);

.....

//some logic of resolution for tcp msg bytes

.....
}

delete[] recv_buf;
return 0
}

最佳答案

如我所料,您忽略了返回代码,这可能表示成功或失败,因此您在出现错误或流结束条件时无限循环(阻塞)。

注意您应该在堆栈上分配recv_buf,而不是动态分配。不要在不必要时使用堆。

关于c++ - 虚幻引擎 4 : Recv function would keep blocking when TCP server shutdown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37383400/

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