我自己封装了一个简单的类CIDSocket_Receive。我在线程中创建,可是bind()老是返回WSAEADDRNOTAVAIL 10049这个错误。不知道为什么。class CIDSocket_Receive{
public:
CIDSocket_Receive(const CID&);
virtual ~CIDSocket_Receive(void); void Create();
void Close();
int ReceiveFrom(); void start_receive_thread();
static UINT receive_thread(LPVOID);private:
SOCKET h_mSocket;
         char buff[2048];
         std::string address;
};//cppCIDSocket_Receive::CIDSocket_Receive()
{
//对address赋值
}void CIDSocket_Receive::start_receive_thread()
{
         thread_handle = AfxBeginThread(receive_thread, this);
}void CIDSocket_Receive::Create()
{
h_mSocket = socket(AF_INET, SOCK_DGRAM, 0);
SOCKADDR_IN addrr;
addrr.sin_family = AF_INET;
addrr.sin_addr.S_un.S_addr = inet_addr(address.c_str());
addrr.sin_port = htons(12345);
bind(h_mSocket,(LPSOCKADDR)&addrr,sizeof(addrr));
int n =GetLastError(); 
char ss[12]; itoa(n, ss,10); AfxMessageBox(ss);//10049,我查看了
                                            //inet_addr()的返回,是正确的
u_long t = 1;
ioctlsocket(h_mSocket, FIONBIO, &t);// set to non-blocking
}int CIDSocket_Receive::ReceiveFrom()
{
SOCKADDR_IN rev_addr;
rev_addr.sin_family = AF_INET;
rev_addr.sin_addr.s_addr = inet_addr(address.c_str());
rev_addr.sin_port = htons(12345);
int rev_size_addr = sizeof(rev_addr);
return recvfrom(h_mSocket, buff, 2048, 0, (SOCKADDR *)&rev_addr, &rev_size_addr);
}void CIDSocket_Receive::Close()
{
closesocket(h_mSocket);
}UINT CIDSocket_Receive::receive_thread(LPVOID pParam)
{
CIDSocket_Receive* p = reinterpret_cast<CIDSocket_Receive*>(pParam); for(;;Sleep(1000))
{
p->Create();
                  p->ReceiveFrom();
         }
          return 0;
}