我创建了一个TCP端口,但在执行Connect时失败。调用WSAGetLastError(),返回的错误值是2。不知是什么原因?另外,在win2003 server中出现的几率比在2000中出现的几率小。奇怪。
解决方案 »
- LoadLibrary 能载入有lib 的dll吗
- 菜蛋问题:求一简单算法实现
- 串口通信怎么接收数据啊?
- 郁闷的编译问题,请高手指教!
- 关于Socket通讯的比较好的C++封装类大家可否推荐下?
- 懂vc的朋友,請幫忙查看這個問題出在哪裡?
- 为什么CComboBox对象不能传进函数里?(50) 散分了啊
- 特急:如何用一幅真彩jpg图片作为Dialog的背景图片,并且该图片要保存在资源文件中。请高手指点,百分相送,多谢了!
- 用Directshow放视频,为什么会在自动生成动ActiveMovieWindow里播放?
- 用ADO访问远程机的ACCESS数据库,为什么两个用户不能同时共享此数据库???多谢了!
- 关于对话框的一个问题?
- 如何辅助线程中得到的数据同步显示到clistbox中
int Error; // gets error values
struct sockaddr_in SockAddr; // socket address for WSAConnect
int SockAddrLen; // the length of the above
m_EventSocket = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
if (m_EventSocket == INVALID_SOCKET)
{
return WSAGetLastError();
} unsigned long ul = 1; Error = ioctlsocket(m_EventSocket, FIONBIO, (unsigned long *)&ul);
if(SOCKET_ERROR == Error)
{
SAFE_CLOSESOCKET(m_EventSocket);
return WSAGetLastError();
} // 禁用Nagle算法
int nZero = 1;
setsockopt(m_EventSocket, IPPROTO_TCP, TCP_NODELAY,
(char *)&nZero, sizeof(nZero)); // 保持活动
setsockopt(m_EventSocket, SOL_SOCKET, SO_KEEPALIVE,
(char *)&nZero, sizeof(nZero));
// 下面的hCP为完成端口句柄
HANDLE hrc = CreateIoCompletionPort((HANDLE)m_EventSocket, hCP, 1, 0);
if(hrc == NULL)
{
SAFE_CLOSESOCKET(m_EventSocket);
return GetLastError();
} SockAddr.sin_family = AF_INET;
SockAddr.sin_port = wPort;
SockAddr.sin_addr.s_addr = dwIP;
SockAddrLen = sizeof(SockAddr); ConnectStatus = connect(m_EventSocket,
(sockaddr *)&SockAddr,
SockAddrLen);
if (ConnectStatus == SOCKET_ERROR)
{
Error = WSAGetLastError();
if (Error != WSAEWOULDBLOCK)
{
// 错误WSAEWOULDBLOCK意味着连接稍后建立
struct in_addr in;
in.S_un.S_addr = m_dwLocalIP;
//int nLen = sizeof(int);
//getsockopt(m_EventSocket, SOL_SOCKET, SO_ERROR, (char *)&Error, &nLen);
Error);
SAFE_CLOSESOCKET(m_EventSocket);
return Error;
}
}
setsockopt(m_EventSocket, IPPROTO_TCP, TCP_NODELAY,
(char *)&nZero, sizeof(nZero));还没用过这个东东,学习!
SockAddr.sin_addr.s_addr = dwIP;这两个参数有没有转换成网络字节顺序??
An application cannot call WSAGetLastError to determine the error code as is normally done in Windows Sockets is WSAStartup fails. The WS2_32.DLL will not have been loaded in the case of a failure so the client data area where the "last error" information is stored could not be established.
你出现的那种错误码不是winsock的,它的错误码都是10000以上的,大概没有调用WSAStartup的缘故吧,所以你用WSAGetLastError 所获得的错误码不是winsock的