假設我從socket(2)
得到了一個文件描述符,並且我已經對它做了connect(2)
- 以後有什麼辦法可以確定(從正在運行的程序中)哪個網絡設備可能用於底層傳輸?在fd上調用stat(2)
給出的設備號碼爲0; ioctl(2)
或getsockopt(2)
選項都不適用。我能找到什麼網絡接口/設備處理我的套接字?
2
A
回答
0
從accept
調用你應該能夠得到遠程客戶端的IP地址(在Beej's上看到here)。假設您沒有任何不對稱路由,您可以在本地路由表中查找到該地址的路由。路由表應該告訴你使用什麼以太網設備將數據包發送到遠程客戶端。
編輯:
你可以使用下面的命令行工具與遠程客戶端的地址來查詢本地路由表:
ip route get <remote-client-ip-addr>
1
有沒有萬無一失的辦法做下去 - 當然不是一個POSIX符合要求的方式。
但是,在實踐中,您可以輕鬆地確定99%的時間界面。完成connect
後,使用getsockname
獲取IP地址,然後查看包裝箱上可用接口的列表,找到具有匹配IP地址的接口。
相關問題
- 1. Perl - 網絡 - 我如何處理超過128個套接字SOMAXCONN?
- 2. 網絡套接字理論
- 3. 設置網絡套接字
- 4. 網絡套接字性能
- 5. 爲什麼我們需要網絡套接字?
- 6. Android設備的網絡接口名稱
- 7. 代理WS(網絡套接字)連接?
- 8. 網絡支持是否支持網絡套接字處理?
- 9. 如何處理我的套接字
- 10. 使用ReactiveCocoa處理網絡和套接字連接
- 11. NodeJS幫助代理TCP端口數據到網絡套接字
- 12. 到網絡套接字打開連接
- 13. 連接到我的網絡的檢測設備
- 14. 爲什麼不能不將ecilpse連接到我的Android設備?
- 15. Google找到我的備份網站。我能做些什麼呢?
- 16. 使用Java套接字,連接到另一個網絡上的其他設備的正確地址是什麼?
- 17. 我怎樣才能發佈音頻的網絡套接字
- 18. HTTP網絡套接字與ActiveMQ網絡套接字
- 19. 將套接字綁定到網絡接口
- 20. 連接到java中的網絡設備
- 21. 爲什麼我接下來不能處理我的hadoop程序?
- 22. 使用套接字寫入網絡設備的問題
- 23. 網絡上的套接字
- 24. 找到我的設備連接的串口
- 25. 我怎麼能直接連接到在3G移動設備?
- 26. 用於配置我的網絡設備的批處理文件
- 27. 找到我的UDP套接字的「真實」端口的方法?
- 28. 未收到Android設備的所有網絡接口
- 29. 爲什麼我的套接字程序無法連接到互聯網?
- 30. OpenShift中的網絡套接字連接
使用['getifaddrs()'](http://man7.org/linux/man-pages/man3/getifaddrs.3.html)檢索接口列表及其IP地址。 –
另外,在Linux 3.8+中,'getsockopt()'支持'SO_BINDTODEVICE'選項,所以也可以告訴你套接字綁定到哪個接口。 –