WSAAsyncSelect 问题 已经accept的帖子,send失败?
- C/C++ code
SOCKET sock; //全局sockaddr_in sockaddr_info;……void OnSocket(WPARAM wParam, LPARAM lParam){ DWORD err ; int ret; char str[] = "WSAAsyncSelect"; int len = sizeof(sockaddr); switch(WSAGETSELECTEVENT(lParam)) { case FD_ACCEPT: ret = accept(sock,reinterpret_cast<sockaddr *>(&sockaddr_info),&len); if(ret == SOCKET_ERROR) { err = WSAGetLastError(); } break; case FD_WRITE: ret = send(sock,str,strlen(str),0); if(ret == SOCKET_ERROR) { err = WSAGetLastError(); } break; }}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ …… case WM_SOCKET: OnSocket(wParam,lParam); break; case WM_PAINT: ……
设了n个断点,结果是:accept返回正常值,send返回-1.用WSAGetLastError看了下,错误号10057,查了一下,是WSAENOTCONN Socket is not connected.
怎么回这样呢?sock是全局的呀
[解决办法]
send的时候,不能用sock,你得用accept的返回值,也就是你上面的那个ret来进行send使用