繁体   English   中英

非阻塞插座

[英]Non Blocking Socket

非阻塞套接字是我们调用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)

太阳的基本白皮书:

太阳庇护网

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

在这里以及在MSDN中,如何使用OVERLAPPED结构编写代码

在Linux上,请使用epoll()。

在solaris socket()上。

当套接字尚未准备好时,请注意对其进行读写。 (选择输出)因为您可能会收到EAGAIN错误。

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

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

提升::: asio

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM