2010-08-27 62 views
1

我曾經認爲inet_ntop的第二個參數應始終爲struct in_addrstruct in6_addr。但後來我擡頭看了看POSIX definitioninet_ntop的第二個參數的正確類型/格式是什麼?

const char *inet_ntop(int af, const void *restrict src, 
         char *restrict dst, socklen_t size); 

[...]的SRC參數指向一個緩衝區支持IPv4地址如果AF說法是AF_INET,或者如果IPv6地址af變元是AF_INET6;地址必須是網絡字節順序。 [...]

正如你可以看到函數原型和描述都是模糊的。

這是爲什麼?什麼是src允許/便攜式選擇?

回答

1

這是一個指向IPv4或IPv6的指針,存儲在各自的頭文件中 - 所以在IPv4中爲4字節緩衝區,在IPv6中爲16字節緩衝區。

struct in_addrstruct in6_addr是用於存儲這些地址的便利結構,但如果需要,您可以分別使用unsigned char [4]unsigned char [16]

+0

在這種情況下,只有當IP地址是第一個成員時,'struct in_addr'或'struct in6_addr'纔會起作用。這是POSIX的要求嗎?我找不到這方面的參考。 – schot 2010-08-27 10:36:05

+0

@schot:這是一個很好的觀點 - 我想技術上意味着你需要傳遞這些結構的's_addr'和/或's6_addr'成員的地址。 – caf 2010-08-27 11:38:11

+0

感謝您的回答,我將使用'(6)_addr'成員的類型'in_addr_t'和'uint8_t [16]'。 – schot 2010-08-28 12:05:28

相關問題