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
错误。
我正在尝试 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
错误。