簡體   English   中英

從沒有綁定的特定端口發送UDP

[英]Send UDP from specific port without bind

問題是有兩個過程:

  1. 進程A只知道發送。
  2. 進程B只知道接收。

並且進程C是已編譯的二進制文件,因此無法更改。

進程C必須從A接收並發送到B。我將進程B綁定到端口X。由於進程A總是每次都從不同的隨機端口發送數據,並且進程C將其應答到這些端口,因此進程B永遠不會獲取數據。

目前我的解決方案:

  • 綁定進程B以監聽端口X(使用重用)
  • 綁定進程A以從端口X發送(使用重用)
  • 始終從A開始,然后從B開始。

此解決方案有效,但不一致。

所以問題是:是否有可能從特定端口發送localhost UDP數據包而不綁定到它? 也許其他解決方案?

這是當前狀態的圖表:

在此處輸入圖片說明

從單個父進程啟動A和B。 父進程創建套接字並將其綁定到端口X。然后進行派生,子進程繼承此套接字。 然后,進程之一執行A,其他進程執行B。套接字的FD可以在argv傳遞給它們。

SO_REUSEPORT無法可靠工作的原因是因為每個套接字都有自己的輸入隊列。 當數據報到達端口時,操作系統會選擇其中一個套接字並將消息放入其隊列中。 如果它選擇了A使用的套接字,則B將看不到該消息。 我認為沒有辦法告訴操作系統其中一個套接字僅用於發送,而不用於接收。

使用繼承的套接字可以解決此問題,因為它只是一個套接字,因此只有一個隊列。 無論哪個調用recv()進程都將獲取所有消息。

暫無
暫無

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

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