[英]Send UDP from specific port without bind
問題是有兩個過程:
並且進程C是已編譯的二進制文件,因此無法更改。
進程C必須從A接收並發送到B。我將進程B綁定到端口X。由於進程A總是每次都從不同的隨機端口發送數據,並且進程C將其應答到這些端口,因此進程B永遠不會獲取數據。
目前我的解決方案:
此解決方案有效,但不一致。
所以問題是:是否有可能從特定端口發送localhost UDP數據包而不綁定到它? 也許其他解決方案?
這是當前狀態的圖表:
從單個父進程啟動A和B。 父進程創建套接字並將其綁定到端口X。然后進行派生,子進程繼承此套接字。 然后,進程之一執行A,其他進程執行B。套接字的FD可以在argv
傳遞給它們。
SO_REUSEPORT
無法可靠工作的原因是因為每個套接字都有自己的輸入隊列。 當數據報到達端口時,操作系統會選擇其中一個套接字並將消息放入其隊列中。 如果它選擇了A使用的套接字,則B將看不到該消息。 我認為沒有辦法告訴操作系統其中一個套接字僅用於發送,而不用於接收。
使用繼承的套接字可以解決此問題,因為它只是一個套接字,因此只有一個隊列。 無論哪個調用recv()
進程都將獲取所有消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.