我的初始UDP套接字绑定到127.0.0.1:9898。如何绑定/连接多个UDP套接字
第一次通过epoll/kqueue得到传入数据的通知时,我执行recvfrom()并填充名为peer_name
的包含对等信息(ip:port)的struct sockaddr。
然后,我创建使用套接字()的新UPD插座,
然后我绑定()这个新创建的套接字连接到同一个IP:比我原来的插座端口(127.0.0.1:9898)。
然后我使用connect()将刚刚创建的套接字连接到刚刚发送给我的对象。我在struct sockaddr中获得了名为peer_name
的信息。
然后我在我的epoll/kqueue向量中添加我新创建的套接字并等待通知。
我希望只接收来自对端的UDP帧“”连接到“”。
1 /确实netstat -a -p udp
是假设向我显示IP:我的新创建的套接字的端口是“”连接到“”?
2 /我可能做错了,因为在创建我的新套接字后,此套接字接收所有到达IP绑定的IP:PORT端口的所有传入UDP数据包,而不考虑源对等IP:PORT。
我想看看我正在努力做的一个工作示例:) 或任何暗示我做错了什么。
谢谢!
可以肯定的是,我在谈论服务器端。这个想法是,新的套接字将接收来自特定客户端的所有数据。所以这就是为什么我连接()我的新套接字到源客户端IP:PORT。 套接字作为sockname和对等名称。sockname是套接字绑定到的ADDR:PORT,而peername是套接字关联的ADDR:PORT(使用connect()),因此send()知道发送数据的人。 getsockname(),getpeername()。 – nicboul 2010-06-03 18:02:03
@nicboul:是的。 Chris指出的是,UDP套接字上的connect()通常只在* client端有用,其中一个套接字只与一个对等端进行通信。它在服务器端无用。 – caf 2010-06-04 02:21:10
@克里斯我不会挑剔,但我不确定我是否同意你的发言。我认为连接具有remote-addr绑定的效果,因此您可以将该套接字上的流量限制为来自特定客户端的消息。我在收到第一条消息之前和之后,以'strace NC-4lu $((0x4444))'为后面跟着'grep 4444/proc/net/udp'(在不同的终端)。 'nc'不接受来自其他客户的消息。 – nhed 2012-02-02 17:58:36