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;
}
============================================================
下面这种情况却能得到错误信息!真不知道为什么!!
错误信息是通常每个套接字地址(协议/网络/端口)只允许使用一次,但我是使用一次啊,不知道怎么出错了.各位兄弟帮忙!!