In the AcceptEx part of the code, the address information is written to the buffer normally, but when I check the lpfnAcceptEx part by calling GetAcceptExSockaddrs later, the local and remote addresses are nullptr. Do you have any idea why? If it's AcceptEx, everything is fine
Server server(8000);
LPSession ses = nullptr;
GUID GuidDisconnectEx = WSAID_DISCONNECTEX;
GUID GuidAcceptEx = WSAID_ACCEPTEX;
for (int i = 0; i < 50; ++i)
{
DWORD dwBytes;
SOCKADDR_IN caddr;
int addrlen = sizeof(caddr);
ZeroMemory(&caddr, addrlen);
ses = server.Add_Session(new Session(&server));
WSAIoctl(ses->sock, SIO_GET_EXTENSION_FUNCTION_POINTER,
&GuidAcceptEx,sizeof(GuidAcceptEx),
&ses->lpfnAcceptEx, sizeof(ses->lpfnAcceptEx),
&dwBytes, NULL, NULL);
WSAIoctl(ses->sock, SIO_GET_EXTENSION_FUNCTION_POINTER,
&GuidDisconnectEx, sizeof(GuidDisconnectEx),
&ses->lpfnDisconnectEx, sizeof(ses->lpfnDisconnectEx),
&dwBytes, NULL, NULL);
ses->lpfnAcceptEx(server.listen_sock, ses->sock, &ses->aio->buf, 0,
sizeof(SOCKADDR_IN) + 16, sizeof(SOCKADDR_IN) + 16, NULL,
reinterpret_cast<LPOVERLAPPED>(&ses->aio->over));
AcceptEx(server.listen_sock, ses->sock, &ses->aio->buf, 0,
sizeof(SOCKADDR_IN) + 16, sizeof(SOCKADDR_IN) + 16, NULL,
reinterpret_cast<LPOVERLAPPED>(&ses->aio->over));
if (i == 49)
cout << "Ready" << endl;
}
PSOCKADDR pRemoteSocketAddr = nullptr;
PSOCKADDR pLocalSocketAddr = nullptr;
INT pRemoteSocketAddrLength = 0;
INT pLocalSocketAddrLength = 0;
GetAcceptExSockaddrs(
&session->aio->buf, 0,
sizeof(SOCKADDR_IN) + 16, sizeof(SOCKADDR_IN) + 16,
&pLocalSocketAddr, &pLocalSocketAddrLength, &pRemoteSocketAddr, &pRemoteSocketAddrLength);
SOCKADDR_IN remoteAddr = *(reinterpret_cast<PSOCKADDR_IN>(pRemoteSocketAddr));