首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

WSAAsyncSelect 有关问题 已经accept的帖子,send失败

2012-04-28 
WSAAsyncSelect 问题 已经accept的帖子,send失败?C/C++ codeSOCKET sock //全局sockaddr_in sockaddr_inf

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使用

热点排行