函数如下:
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.
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.
解决方案 »
- CFtpFileFind.GetFileName()中文乱码,请求帮助!
- 请问,试用期工资一般是转正后工资的百分之多少?
- 请教采用什么样的设计方案?
- 有没有从已知句柄得出句柄所代表资源的信息的方法?
- msxml3.dll初始化为什么失败?
- 关于加密 在线等待,解决后马上给分。
- 请问:如何动态的改变toobar的tooltip的提示??
- 请教窗口的前后位置问题
- 在MDI建立一个新的文档时,跳出另存为对话框,当点击确定时,创建视图.(类似 Access的新建文件)
- 我要用vc的opengl编写一个vrml解释器!谁有类似源码????
- 哪有比较全的论文样板下载,包括原代码?给100分
- 简单问题 来拿分
但为什么未赋初值就会导致这样的错误,还是没有彻底搞明白,望MFCClass(8dog)兄指教。谢谢!
另外,调用局部变量应该变成全局变量,这样才能保持原来的连接。