zoukankan      html  css  js  c++  java
  • Win32 API编程:网络编程在设置WSAAsyncSelect模型后connect的返回值问题

    通过WSAAsyncSelect()可以设置非阻塞异步套接字

    ::WSAAsyncSelect(s, hDlg, WM_SOCKET, FD_CONNECT | FD_CLOSE | FD_WRITE | FD_READ);

    然而设置WSAAsyncSelect()后,进行connect()与服务端连接:

    if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1)
    						{
    							MessageBox(NULL, L"connect()失败!", L"提示", MB_OK);
    							::WSACleanup();
    							return 0;
    						}
    

    事实上在WSAAsyncSelect()设置后,就会将SOCKET设置成“异步选择”的I/O模型,这个时候,对于SOCKET的操作就是异步的了,而且是和Windows的消息机制紧密结合了。在这个之后,connect等函数的操作结果(成功或不成功)都不是通过函数的返回值提现的。而是在链接成功后,通过消息机制通知应用程序。

    所以上述connect语句应当直接改为:

    ::connect(s, (sockaddr*)&servAddr, sizeof(servAddr));
    

    无需进行返回值判断,将::WSACleanup();删除,否则导致connect不成功,无法与服务端进行通信。

  • 相关阅读:
    图标库
    AndroidManifest中注册application
    两个App之间的跳转 并传值
    Fresco加载显示gif图片
    弹出PopupWindow背景变暗的实现
    判断网络是否可用
    Java的安全性和可移植性
    DBUtils
    Observer
    IO
  • 原文地址:https://www.cnblogs.com/fancing/p/6559055.html
Copyright © 2011-2022 走看看