我写了一段关于SOCKET的,然后把代码写在DLL中,如下(节选)
while (1)
{
nLen = recv(mSocket, buffer, MLEN, 0);
if ((nLen == 0) || (nLen == SOCKET_ERROR))
{
AfxMessageBox("错误!", MB_OK);
break;
}
buffer[nLen] = '\0';
}
如果DLL调用,就不停的弹出AfxMessageBox;
但是在普通程序中(没有DLL),就很正常
请高手给指点

解决方案 »

  1.   

    在调用AfxMessageBox之前,调用WSAGetLastError
      

  2.   

    用WSAGetLastError或者GetLastError看下是什么错误
      

  3.   

    那就把if ((nLen == 0) || (nLen == SOCKET_ERROR))分开,看是哪种情况。
    还有socket是怎样设置的,如果是非阻塞的,nLen == 0会经常发生
      

  4.   

    我可能没有表达清楚,我把SOCKET写DLL,就会出现上述错误,但是写成一般EXE就不会出现
      

  5.   

    老实说,这与dll或exe没太大关系。
    只要环境初始化好了,socket在dll或exe中照样使用。
      

  6.   

    都break了怎么会还弹对话框?另外,为什么把这种AfxMessageBox提示信息放在DLL中,这样操作起来不方便,建议你把DLL的接口改为由应用去判断执行结果。
      

  7.   

    所以我也很奇怪,都BREAK了,应该跳出循环,结果是疯狂的弹出提示窗口,直到死机