gpt4 book ai didi

c - 如何绑定(bind)/连接多个 UDP 套接字

转载 作者:太空狗 更新时间:2023-10-29 15:03:04 24 4
gpt4 key购买 nike

我的初始 UDP 套接字绑定(bind)到 127.0.0.1:9898。

我第一次收到 epoll/kqueue 传入数据的通知时,我执行 recvfrom() 并填充一个名为 peer_name 的结构 sockaddr,其中包含对等信息 (ip:port)。

然后我使用 socket() 创建一个新的 UPD 套接字,

然后我将这个新创建的套接字 bind() 到与我原来的套接字相同的 ip:port (127.0.0.1:9898)。

然后我使用 connect() 将我新创建的套接字连接到刚刚向我发送内容的对等方。我在名为 peer_name 的 struct sockaddr 中有信息。

然后我将新创建的套接字添加到我的 epoll/kqueue vector 中并等待通知。

我希望只从我“连接到”的对等方接收 UDP 帧。

1/netstat -a -p udp 是否应该向我显示我新创建的套接字“连接到”的对等方的 IP:PORT?

2/我可能做错了什么,因为在创建我的新套接字之后,这个套接字接收所有发往我绑定(bind)的 IP:PORT 的传入 UDP 数据包,而不管源对等 IP:PORT。

我想看看我正在尝试做的工作示例 :)或任何关于我做错了什么的暗示。

谢谢!

最佳答案

http://www.softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/unix-socket-faq-5.html

“调用 connect() 会影响套接字的接收行为吗?是的,有两种方式。首先,只返回来自“连接的对等点”的数据报。所有到达您港口的其他人都不会交付给您。

但最重要的是,必须连接 UDP 套接字才能接收 ICMP 错误。 pp。 “TCP/IP Illustrated,第 2 卷”的 748-749 详细说明了为什么会这样。”

关于c - 如何绑定(bind)/连接多个 UDP 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968008/

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