2012-11-11 70 views
3

我想爲Linux Socket API編寫一個C++包裝器。在socket()中請求地址族(AF)。我不想再次請求connect()簽名中的AF,因爲它已經在套接字的構造函數中給出了。那麼如何從現有的套接字獲取AF?從套接字獲取地址族。 Linux

+0

記住地址家族在你的包裝的成員變量? – nos

回答

6

該死的。搜索了大約半個小時。現在發佈這個問題後,我立刻發現了答案。

getsockopt([...])與選項SO_DOMAIN(見socket options

+3

儘管這個選項要小心,因爲它似乎是Linux專用的。如果你正在編寫一個包裝類,你不能僅僅將類型保存爲一個成員變量? –

+0

好主意......謝謝 – ManuelSchneid3r

5

POSIX標準getsockname將幫助:

int getsockname(int socket, struct sockaddr *restrict address, 
     socklen_t *restrict address_len); 

它將在給定結構sockaddr填寫(成功時):

struct sockaddr { 
    unsigned short sa_family; // <- that's what you looking for 
    char    sa_data[14]; 
}