簡體   English   中英

如何綁定/連接多個UDP套接字

[英]how to bind/connect multiple UDP socket

我最初的UDP套接字已綁定到127.0.0.1:9898。

第一次通過epoll / kqueue收到傳入數據的通知時,我執行recvfrom()並填充了一個名為peer_name的結構sockaddr,其中包含對等信息(ip:port)。

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

然后將這個新創建的套接字綁定()到與原始套接字相同的ip:port(127.0.0.1:9898)。

然后我使用connect()將新創建的套接字連接到剛給我發送消息的對等對象。 我在名為peer_name的struct sockaddr中具有信息。

然后,將新創建的套接字添加到我的epoll / kqueue向量中,並等待通知。

我希望只從“連接到”的對等方接收UDP幀。

1 / netstat -a -p udp是否可以向我顯示我新創建的套接字的對等方的IP:PORT是““ connected to”“?

2 /我可能做錯了什么,因為創建新套接字后,此套接字將接收所有目的地為我綁定到的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圖解,第2卷”的748-749提供了有關為何如此的所有詳細信息。”

UDP套接字上的connect(2)僅設置套接字的默認目標地址(如果在套接字上使用write(2)send(2) ,則將在其中發送數據)。 它沒有其他作用-您仍然可以使用sendto(2)sendmsg(2)將數據包發送到其他地址,並且仍然會看到從任何地址發送的數據包。

因此,在端口上打開新的套接字實際上沒有任何意義-對於收到的每個數據包,您需要查看源地址以查看其是否來自您已經看到的地址(因此屬於該邏輯流)或是新地址(新邏輯流)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM