对accept和send,我发现有时是阻塞执行的,有时是非阻塞执行的;但是我不明白为什么,请各位帮忙;
这是我的一段非阻塞代码,大家看看:
BOOL CUdpApp::InitInstance()
{
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
       {......}
}
BOOL CUdpDlg::OnInitDialog()
{
   {.....}
    datagram=socket(AF_INET,SOCK_STREAM,0);
if (datagram==INVALID_SOCKET)
AfxMessageBox("创建socket不成功!");
svrAddr.sin_family=AF_INET;
svrAddr.sin_port=htons(5002);
svrAddr.sin_addr.S_un.S_addr=htons(INADDR_ANY);
if (bind(datagram,(SOCKADDR*)&svrAddr,sizeof(svrAddr))==SOCKET_ERROR)
AfxMessageBox("绑定错误!");

listen(datagram,5); return TRUE;  // return TRUE  unless you set the focus to a control
}
void CUdpDlg::OnButton1() 
{
accept(datagram,(SOCKADDR*)&cliAddr,&len);
AfxMessageBox("Hello");
}如果是accept阻塞执行,便会出现等待状态,但是每点一次button1键,便会产生一个Hello对话框,这说明是非阻塞执行的;
小弟刚刚开始学网络编程,说得比较外行,请多见谅,多指导,谢谢

解决方案 »

  1.   

    应该是阻塞的
    没用ioctlsocket设置为非阻塞
      

  2.   

    你可以看看 accept 是否成功。看返回值和GetLastError()
      

  3.   

    WSAGetLastError()看看返回了什么错误
      

  4.   

    你也不判断accept返回什么就直接认为返回正确了?socket默认情况下阻塞方式。
      

  5.   

    accept阻塞执行,便会出现等待状态?
    如何来的这个结论?