2015-10-18 41 views
-2

我正在使用示例客戶端程序和服務器應用程序。客戶端代碼來自(https://github.com/nori0428/mod_websocket/blob/master/src/mod_websocket_socket.c#L19-L68),服務器程序來自(http://www.thegeekstuff.com/2011/12/c-socket-programming/)。客戶端和套接字程序工作正常,除非我使用SO_BINDTODEVICE將服務器套接字綁定到eth0或eth1 n/w接口。如果我不將服務器套接字綁定到特定的n/w接口,或者如果我將服務器套接字綁定到loopback ip,則客戶機服務器程序正在工作。但是如果我綁定到eth0/eth1,則poll與pollhup和pollerr失敗。由於連接被拒絕,errno返回。但服務器正在運行並在特定的界面中偵聽。 查詢, 我需要限制服務器套接字來接受來自特定接口的數據。我怎麼做? 爲什麼如果我將服務器套接字綁定到eth0/eth1,則客戶端在連接被拒絕時失敗,但是如果我將服務器套接字綁定到回送ip,則客戶端/服務器程序將起作用。如果套接字綁定到eth0接口,則輪詢返回pollhup和pollerr

回答

0

回送數據路徑不經過ETH/0也不ETH/1

因此,如果結合到這些設備,則無法通過環回進行通信。

即使服務器/客戶端位於不同的計算機上,實際上也沒有理由綁定到這些設備。

的「綁定到設備」與有互聯網許多連接網絡服務器工作時,是唯一真正有用的,你想要的流量負載

更容易只是綁定分配到一個「口」(一個神話的設備),並讓通信協議處理實際使用哪個硬件IO的細節。

+0

我需要限制服務器套接字接受來自特定網絡接口的連接,我該怎麼做? – Hariharan