[英]Manually specify which network interface to send data
我已經實現了一個通過 tcp 套接字發送和接收數據的服務。 現在我的機器上有兩個網絡接口,我應該在兩個網絡上運行服務。
如何指定要發送數據的網絡接口? (使用 Boost::asio 或傳統的 Berkeley 套接字,或使用系統調用來動態更改內核的路由表)
我不知道 Boost,但一般來說,如果您想使用特定接口發送/接收而不是將套接字bind()
到該接口的 IP 地址,或者在某些平台上您可以使用setsockopt(SOL_SOCKET, SO_BINDTODEVICE)
代替。
你試過這個嗎,創建一個套接字綁定到 0.0.0.0 以接收來自所有接口的數據包。 然后為每個接口創建一個套接字用於發送數據包。 這里的關鍵是設置 REUSEADDRSS 選項,以便用於發送的套接字可以綁定到每個接口的地址並共享一個接收數據包的相同端口。
如果您正在處理 TCP,已建立的連接將准備綁定到特定接口。 您將無法通過其他接口發送到該連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.