我正在嘗試學習網絡編程和C中的過程。我對sockaddr
這是一個通用地址和sockaddr_in
的結構感到困惑。我的書有這樣一段話:類型轉換sockaddr結構
因此,我們可以在一個SOCKADDR_IN領域填補再投(一 指針)到一個(指針)的sockaddr並把它傳遞到插座 功能,它看着sa_family字段來學習實際的類型,然後 轉換回適當的類型。
但在我看來,這兩個結構應該是兼容的嗎?其中有兩個字段,
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
};
其他有大量
struct in_addr {
uint32_t s_addr;
};
struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
他們都有大小16在內存中。我想這就是爲什麼他們零填充sockaddr_in結構,以使鑄造?我仍然感到困惑 - 如果你不立刻投了,能鑄造出有意義的東西嗎?這是否只是一個臨時演員,利用sa_family_t字段駐留在第一個N
位的事實?
對於網絡相關的所有東西請參閱[** Beej的網絡編程指南**](http://beej.us/guide/bgnet/)。這是一個很好的網絡編程參考/教程。只有** 100%**適用於您當前的問題。 –