请问accept()函数二次被调用时报错10014是何故,谢谢!(附函数)
函数如下:
int RecvMsg()
{
int rc, ret = 0, iAccpetAddrLen;
struct fd_set fdread;
struct timeval timeout;
SOCKET sockServer;
SOCKADDR_IN AcceptAddr;
rc = listen(g_sockListening, 1);
if (rc == SOCKET_ERROR)
{
closesocket(g_sockListening);
return -1;
}
FD_ZERO(&fdread);
FD_SET(g_sockListening, &fdread);
timeout.tv_sec = 5;
timeout.tv_usec = 0;
rc = select(0, &fdread, NULL, NULL, &timeout);
if (rc == SOCKET_ERROR)
{
closesocket(g_sockListening);
return -1; //select failed
}
else if (rc == 0)
{
// timeout: ret = 0
}
else
{
if (FD_ISSET(g_sockListening, &fdread))
{
sockServer = accept(g_sockListening, (SOCKADDR *)&AcceptAddr, &iAccpetAddrLen);
if (sockServer == INVALID_SOCKET)
{
cout << "accept failed with error " << WSAGetLastError() << endl;
closesocket(g_sockListening);
return -1;
}
...
}
}
closesocket(sockServer);
return ret;
}
在短连接方式下,本函数被循环调用,在第一次执行到accept()函数时可正常执行,而第二次执行到accept()函数就会报错10014。不知是否有那位朋友也遇到过类似问题,或能帮兄弟看出这里的疏漏,望不吝指教,谢谢!
PS:WSAEFAULT 10014:The addrlen parameter is too small or addr is not a valid part of the user address space.