linux 高性能读书笔记之通用socket地址
####socket網(wǎng)絡(luò)編程接口
socket的地址是結(jié)構(gòu)體sockaddr
代碼如下
struct sockaddr{
sa_family_t sa_family;
char sa_data[14];
}
sa_family 成員是地址族類(lèi)型(sa_family_t)變量。
地址族類(lèi)型通常與協(xié)議族類(lèi)型對(duì)應(yīng)
1.二者對(duì)應(yīng)表
| PF_UNIX | AF_UNIX | UNIX本地域協(xié)議族 |
| PF_INET | AF_INET | TCP/IPv4協(xié)議族 |
| PF_INET6 | AF_INET6 | TCP/IPv6協(xié)議族 |
二者定義在bits/socket.h頭文件,值一樣,所以二者經(jīng)常混用
sa_data成員用于存放socket地址值
但是不同的協(xié)議族的地址值具有不同的含義和長(zhǎng)度
| PF_UNIX | 文件的路徑名,長(zhǎng)度可達(dá)108字節(jié) |
| PF_INET | 16bit 端口號(hào)和32bit IPv4地址 |
| PF_UNIX | 文件的路徑名,長(zhǎng)度可達(dá)108字節(jié) |
| PF_INET6 | 16bit 端口號(hào),32bit流標(biāo)識(shí),128bitIPv6地址,32bit范圍ID,共26字節(jié) |
問(wèn)題:14字節(jié)的sa_data無(wú)法容納多數(shù)協(xié)議族的地址值,因此linux定義了新的通用socket地址結(jié)構(gòu)體
struct sockaddr_storage{
}
ssalign:用于內(nèi)存對(duì)齊
3.專(zhuān)用socket地址
問(wèn)題: 上述通用結(jié)構(gòu)體很不好用,設(shè)置與獲取IP地址和端口號(hào)需要執(zhí)行繁瑣的位操作。
解決:linux為各個(gè)協(xié)議族提供了專(zhuān)門(mén)的socket地址結(jié)構(gòu)體
3.1
UNIX本地域協(xié)議族:
struct sockaddr_un{
sa_family_t sin_family; //地址族AF_UNIX
char sun_path[108]; // 文件路徑名
總結(jié)
以上是生活随笔為你收集整理的linux 高性能读书笔记之通用socket地址的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 聊聊全站HTTPS带来的技术挑战
- 下一篇: Linux查看系统cpu个数、核心书、线