SOCKADDR_IN addrSock;
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSock.sin_family=AF_INET;
addrSock.sin_port=htons(4000);
int retVal;
retVal=bind(m_socket,(sockaddr*)&addrSock,sizeof(addrSock));
if(SOCKET_ERROR==retVal)
{
closesocket(m_socket);
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox((LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf ); return FALSE;
}
========================================================================
这样的话GetLastError()返回的是0,而下面的确可以得到错误信息!
获取错误信息的代码一个是放在if(SOCKET_ERROR==retVal){//里面}
一个是放在if(SOCKET_ERROR==retVal)的前面
请问是不同是为什么??
SOCKADDR_IN addrSock;
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSock.sin_family=AF_INET;
addrSock.sin_port=htons(4000);
int retVal;
retVal=bind(m_socket,(sockaddr*)&addrSock,sizeof(addrSock));
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox((LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
if(SOCKET_ERROR==retVal)
{
closesocket(m_socket); return FALSE;
}
============================================================
下面这种情况却能得到错误信息!真不知道为什么!!
错误信息是通常每个套接字地址(协议/网络/端口)只允许使用一次,但我是使用一次啊,不知道怎么出错了.各位兄弟帮忙!!
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSock.sin_family=AF_INET;
addrSock.sin_port=htons(4000);
int retVal;
retVal=bind(m_socket,(sockaddr*)&addrSock,sizeof(addrSock));
if(SOCKET_ERROR==retVal)
{
closesocket(m_socket);
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox((LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf ); return FALSE;
}
========================================================================
这样的话GetLastError()返回的是0,而下面的确可以得到错误信息!
获取错误信息的代码一个是放在if(SOCKET_ERROR==retVal){//里面}
一个是放在if(SOCKET_ERROR==retVal)的前面
请问是不同是为什么??
SOCKADDR_IN addrSock;
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSock.sin_family=AF_INET;
addrSock.sin_port=htons(4000);
int retVal;
retVal=bind(m_socket,(sockaddr*)&addrSock,sizeof(addrSock));
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox((LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
if(SOCKET_ERROR==retVal)
{
closesocket(m_socket); return FALSE;
}
============================================================
下面这种情况却能得到错误信息!真不知道为什么!!
错误信息是通常每个套接字地址(协议/网络/端口)只允许使用一次,但我是使用一次啊,不知道怎么出错了.各位兄弟帮忙!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货