我的初始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