c/c++语言开发共享非阻塞sockets

非阻塞套接字是我们调用fcntl()方法并将O_NONBLOCK标志与它关联的套接字。 任何人都可以告诉我将普通TCP_IP套接字转换为非阻塞套接字还需要什么?

如果非阻塞套接字可以与Windows服务器一起使用,可能会出现什么问题?

    linux的示例init可能如下所示:

    int flags; s = socket(PF_INET, SOCK_STREAM, IPPROTO_IP) // ret 5 setsockopt(s, SOL_TCP, TCP_NODELAY, [1], 4) setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, [1], 4) setsockopt(s, SOL_SOCKET, SO_REUSEADDR, [1], 4) flags = fcntl(s,F_GETFL,0); assert(flags != -1); fcntl(s, F_SETFL, flags | O_NONBLOCK); connect(s, {sa_family=AF_INET, sin_port=htons(5001), sin_addr=inet_addr("192.168.0.68")}, 16) 

    来自太阳的基本白皮书:

    太阳asych网

    在Windows上您使用重叠的IO套接字来获得非阻塞网络。

    在这里和MSDN中查看如何使用OVERLAPPED结构编写代码

    在Linux上使用epoll()。

    在solaris socket()上。

    在未准备就绪时,请注意读取或写入套接字。 (select-output)因为您可能会收到EAGAIN错误。

    伟大的跨平台库(但C ++和新的c ++标准候选者)是boost :: asio。

    它使用本机系统异步方法。

    提高:: ASIO

      以上就是c/c++开发分享非阻塞sockets相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560750.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐