gpt4 book ai didi

你能绑定(bind)()和连接()UDP连接的两端吗

转载 作者:IT老高 更新时间:2023-10-28 12:40:08 27 4
gpt4 key购买 nike

我正在编写一个点对点消息队列系统,它必须能够通过 UDP 运行。我可以任意选择一侧或另一侧作为“服务器”,但这似乎不太正确,因为两端都在从另一端发送和接收相同类型的数据。

是否可以绑定(bind)()和连接()两端,以便它们只相互发送/接收?这似乎是一种很好的对称方式。

最佳答案

你好,从遥远的 future ,即 2018 年,到 2012 年。

事实上,在实践中 connect() 使用 UDP 套接字是有原因的(尽管有福的 POSIX and its implementations 理论上并不要求您这样做)。

一个普通的 UDP 套接字不知道它 future 的目的地,所以 it performs a route lookup each time sendmsg() is called .

但是,如果事先使用特定远程接收器的 IP 和端口调用 connect(),操作系统内核将能够 write down the reference to the route and assign it to the socket ,如果后续的 sendmsg() 调用 不指定接收者 ( otherwise the previous setting would be ignored ),则发送消息的速度会显着加快,而是选择默认的。

看看lines 1070 through 1171 :

if (connected)
rt = (struct rtable *)sk_dst_check(sk, 0);

if (!rt) {
[..skip..]

rt = ip_route_output_flow(net, fl4, sk);

[..skip..]
}

在 Linux 内核 4.18 之前,此功能主要仅限于 IPv4 地址系列。但是,从 4.18-rc4(希望 Linux 内核版本 4.18 也是如此)开始,it's fully functional with IPv6 sockets as well .

它可能是 a serious performance benefit 的来源,尽管它在很大程度上取决于您使用的操作系统。至少,如果您使用的是 Linux 并且不将套接字用于多个远程处理程序,您应该尝试一下。

关于你能绑定(bind)()和连接()UDP连接的两端吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741392/

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