【发布时间】:2021-09-24 21:48:00
【问题描述】:
我使用的是 UE4 4.26.2 github 源代码,windows 10 1909,visual studio 2019。
代码:
// 32-bit unsigned integer
typedef unsigned int uint32;
// 64-bit unsigned integer
typedef unsigned long long uint64;
template<typename T32BITS, typename T64BITS>
struct SelectIntPointerType<T32BITS, T64BITS, 8>
{
// Select the 64 bit type.
typedef T64BITS TIntPointer;
};
typedef SelectIntPointerType<uint32, uint64, sizeof(void*)>::TIntPointer UPTRINT;
UPTRINT TcpSocketListen(uint16 Port)
{
// See TcpSocketConnect() for why WSASocket() is used here.
SOCKET Socket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, nullptr, 0, WSA_FLAG_NO_HANDLE_INHERIT);
sockaddr_in SockAddr;
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = 0;
SockAddr.sin_port = htons(Port);
int Result = bind(Socket, (SOCKADDR*)&SockAddr, sizeof(SockAddr));
Result = listen(Socket, 1);
if (!TcpSocketSetNonBlocking(Socket, 1))
{
closesocket(Socket);
return 0;
}
return UPTRINT(Socket) + 1;
}
////////////////////////////////////////////////////////////////////////////////
int32 TcpSocketAccept(UPTRINT Socket, UPTRINT& Out)
{
SOCKET Inner = Socket - 1;
Inner = accept(Inner, nullptr, nullptr);
}
static UPTRINT GControlListen = 0;
GControlListen = TcpSocketListen(1985);
UPTRINT Socket;
int Return = TcpSocketAccept(GControlListen, Socket);
调试时,Visual Studio 在 行:接受(内部,nullptr,nullptr);
输出: 在 0x00007FFCDF673B19 处引发异常(在 UE4Editor-Win64-Debug.exe 中):Microsoft C++ 异常:内存位置 0x0000001F892FFC38 处的 int。
最好的祝愿, 滇
【问题讨论】:
-
为什么是
Socket - 1?你希望你的代码做什么?究竟是什么问题? -
visual studio 在函数“accept”中捕获 c++ 异常。
-
请提取并提供minimal reproducible example 并将其与完整的错误输出一起包括在内。作为这里的新用户,也可以使用tour 并阅读How to Ask。
-
您最近的编辑似乎不包括接受电话?请提供minimal reproducible example
-
感谢您的回复。现在我完成了代码。
标签: c++ winsock unreal-engine4