winsock2 在不调用接受函数的情况下接受客户端

winsock2 accepting clients without calling accept function

我正在尝试 Microsoft 文档中的 winsock 示例,

客户代码 https://docs.microsoft.com/en-us/windows/win32/winsock/complete-client-code

服务器代码 https://docs.microsoft.com/en-us/windows/win32/winsock/complete-server-code

我面临的问题是客户端代码中的 connect 函数 returns 有效套接字 fd 没有从服务器端接受,我删除了 accept 功能,但客户端仍然能够连接并且 return 有效套接字 fd。

iResult = listen(ListenSocket, SOMAXCONN);
if (iResult == SOCKET_ERROR) {
    printf("listen failed with error: %d\n", WSAGetLastError());
    closesocket(ListenSocket);
    WSACleanup();
    return 1;
}

while (1)
{
    Sleep(1000);
}

感谢任何帮助

如果listen() returns成功,OS会在后台接受新连接请求,并将新连接放入内部队列,accept() 便会拉起。因此,即使服务器代码从未调用 accept(),只要队列未满,新连接仍会在后台接受。如果队列确实已满,后续的新连接请求将失败并出现 (WSA)ECONNREFUSED 错误。