linux 高性能读书笔记之通用socket地址
生活随笔
收集整理的這篇文章主要介紹了
linux 高性能读书笔记之通用socket地址
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
####socket網絡編程接口
socket的地址是結構體sockaddr
代碼如下
struct sockaddr{
sa_family_t sa_family;
char sa_data[14];
}
sa_family 成員是地址族類型(sa_family_t)變量。
地址族類型通常與協議族類型對應
1.二者對應表
| PF_UNIX | AF_UNIX | UNIX本地域協議族 |
| PF_INET | AF_INET | TCP/IPv4協議族 |
| PF_INET6 | AF_INET6 | TCP/IPv6協議族 |
二者定義在bits/socket.h頭文件,值一樣,所以二者經?;煊?/p>
sa_data成員用于存放socket地址值
但是不同的協議族的地址值具有不同的含義和長度
| PF_UNIX | 文件的路徑名,長度可達108字節 |
| PF_INET | 16bit 端口號和32bit IPv4地址 |
| PF_UNIX | 文件的路徑名,長度可達108字節 |
| PF_INET6 | 16bit 端口號,32bit流標識,128bitIPv6地址,32bit范圍ID,共26字節 |
問題:14字節的sa_data無法容納多數協議族的地址值,因此linux定義了新的通用socket地址結構體
struct sockaddr_storage{
}
ssalign:用于內存對齊
3.專用socket地址
問題: 上述通用結構體很不好用,設置與獲取IP地址和端口號需要執行繁瑣的位操作。
解決:linux為各個協議族提供了專門的socket地址結構體
3.1
UNIX本地域協議族:
struct sockaddr_un{
sa_family_t sin_family; //地址族AF_UNIX
char sun_path[108]; // 文件路徑名
總結
以上是生活随笔為你收集整理的linux 高性能读书笔记之通用socket地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聊聊全站HTTPS带来的技术挑战
- 下一篇: Flask form(登录,注册)