2013-09-22 24 views
5

這是netinet /定義互聯網(IPv4)的套接字地址結構in.h中sockaddr_in中的單獨地址結構的需求是什麼?

struct sockaddr_in { 
    uint8_t   sin_len;  
    sa_family_t  sin_family; 
    in_port_t  sin_port;        
    struct in_addr sin_addr;         
    char   sin_zero[8]; 
}; 
struct in_addr { 
    in_addr_t s_addr;           
}; 

這裏是什麼獨立的結構只爲地址字段的需要。

爲什麼我們不能使用以下結構?

struct sockaddr_in { 
    uint8_t   sin_len;  
    sa_family_t  sin_family; 
    in_port_t  sin_port;        
    in_addr_t  sin_addr;         
    char   sin_zero[8]; 
}; 

回答

5

這是歷史原因。在套接字編程的早期階段,struct in_addr包含各種結構的union,因此您可以獲取單個字節。當子網劃分和無類別尋址出現時,這個union就變得不必要了,但將struct換成簡單的unsigned long會破壞很多代碼,所以它只是保持這種方式。

如果您對網絡編程感興趣,但您還沒有拿到UNIX Network Programming的副本,那麼我強烈建議您這樣做,這是一個小小細節的金礦。

+0

Paul-感謝參考書+1 – sujin

+0

它仍然是Windows中的一個聯盟。 – EJP