我在一个简单的基于对话框的应用中,初始化winsock库后,调用socket()产生了一个SOCKET,然后依次调用bind,listen。我原以为单击“接受连接”按钮,代码的执行会在“接受连接”按钮单击响应代码的accept()调用处阻塞,而实际却没有,accept()调用返回为4294967295(显然是错误的),而且其后的recv()调用也马上返回了,返回值为SOCKET_ERROR,这是为何??
     //OnInitDialog()函数代码。
     BOOL CMsSockDlg::OnInitDialog()
    {
CDialog::OnInitDialog(); int ret;
WSADATA wsadata;
if(ret=WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
{
printf("Socket startup error,error code:%d",ret);
return false;
} socklisten=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(5001);
addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

bind(socklisten,(SOCKADDR*)&addr,sizeof(addr)); listen(socklisten,5);

return TRUE;  
    }    //“接受连接”按钮单击响应代码
    void CMsSockDlg::OnAccept() 
   {
// TODO: Add your control notification handler code here SOCKET  sockconnect;
SOCKADDR_IN clientaddr;
int ClientAddrLen;
sockconnect=accept(socklisten,
                             (SOCKADDR*)&clientaddr,&ClientAddrLen); int ret;
char buf[30]; if(ret=recv(sockconnect,buf,30,0)==SOCKET_ERROR)
{
CString strtemp;
strtemp.Format("Failed receive, error code: %d \n",
                                   WSAGetLastError());
AfxMessageBox(strtemp);
}
else
{
AfxMessageBox(buf);
}

    }