gpt4 book ai didi

c - 非阻塞套接字

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:41 25 4
gpt4 key购买 nike

非阻塞套接字是我们调用 fcntl() 方法并将 O_NONBLOCK 标志与其相关联的套接字。谁能告诉我将普通 TCP_IP 套接字转换为非阻塞套接字还需要什么?

如果让非阻塞套接字在 Windows 服务器上工作得很好,可能会出现什么问题?

最佳答案

Linux 的初始化示例可能如下所示:

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)

来自 sun 的基本白皮书:

sun asych net

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

Look here and in MSDN how to write code with OVERLAPPED structures

在 Linux 上使用 epoll()。

在 solaris socket() 上。

注意在套接字未就绪时读取或写入套接字。(选择输出)因为您可能会收到 EAGAIN 错误。

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

它使用 native 系统异步方法。

boost::asio

关于c - 非阻塞套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1525050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com