我自己写了一个从CAsyncSocket继承的socket class。
mysock.Create(3767);
mysock.Listen();
mysock.AsyncSelect(FD_ACCEPT);
mfcsock.Accept(*pNewsock);
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf, 0, NULL );
MessageBox((LPCTSTR)lpMsgBuf,_T("GetLastError"),MB_OK|MB_ICONINFORMATION );
::LocalFree( lpMsgBuf );
连接成功后,用pNewsock给client发消息,总是弹出10038错误( An operation was attempted on something that is not a socket.)
后来我看到一个帖子上说“对非阻塞CAsyncSocket而言,服务器端的socket在调用Listen之后,不能马上调用Accept,而是要在OnAccept事件发生的时候再调用Accept,返回一个新的newSocket,并且通过这个newSocket给客户端发送数据。”(
http://topic.csdn.net/t/20020815/12/942852.html)
我按这个上面说的修改,并注销掉mfcsock.Accept(*pNewsock)之后就马上OK,起先OnAccept没做任何事情。
问题:
1、为什么对于非阻塞的要这样做?
2、如果我不继承,直接使用CAsyncSocket,怎么个调用Accept方法?