我的初始UDP套接字绑定到127.0.0.1:9898.
第一次通过epoll/kqueue收到传入数据的通知时,我执行recvfrom()并填充一个peer_name包含对等信息(ip:port)的struct sockaddr .
然后我使用socket()创建一个新的UPD套接字,
然后我将这个新创建的套接字绑定到与原始套接字相同的ip:port(127.0.0.1:9898).
然后我使用connect()将我新创建的套接字连接到刚发给我东西的同伴.我有struct sockaddr中的信息peer_name.
然后我在epoll/kqueue向量中添加我新创建的套接字并等待通知.
我希望只能从对等端接收UDP帧""连接到"".
1/netstat -a -p udp是假设向我显示IP:对等端口我新创建的套接字""连接到""?
2 /我可能做错了,因为在创建新套接字后,这个套接字会接收所有传入UDP的数据包:PORT我被绑定到,无论源对等IP:PORT.
我想看看我正在尝试做什么的一个有效例子:)或任何暗示我做错了什么.
谢谢!
UDP 套接字上的connect(2)只是设置套接字的默认目标地址(如果您在套接字上使用write(2)或send(2) ,数据将发送到该地址)。它没有其他影响——您仍然可以使用sendto(2)或sendmsg(2)将数据包发送到其他地址,并且您仍然会看到从任何地址发送的数据包。
因此,在端口上打开一个新套接字实际上没有任何意义——对于收到的每个数据包,您需要查看源地址以查看它是否来自您已经见过的地址(因此属于该逻辑流)或者是一个新地址(一个新逻辑流)。