套接口编程
1 struct in_addr{ 2 in_addr_t s_addr; 3 }; 4 struct sockaddr_in{ 5 uint8_t sin_len; 6 sa_family_t sin_family; 7 in_port_t sin_port; 8 9 struct in_addr sin_addr; 10 char sin_zero[8]; 11 };
通用套接口地址结构:
struct sockaddr{ uint8_t sa_len; sa_family_t sa_family; char sa_data[14]; }; int bind(int ,struct sockaddr *,socklen_t); strcut sockaddr_in serv; bind(sockfd,(struct sockaddr *)&serv,sizeof(serv));
1 进程到内核的传递:bind,connect,sendto
struct sockaddr_in serv; connect(sockfd,(SA *)&serv,sizeof(serv));
2 内核到进程的传递:accept,recvfrom,getsockname,getpeername
struct sockaddr_un cli; socklen_t len; len = sizeof(cil); getpeername(unixfd,(SA *)&cli,&len);
值-结果参数:
当函数被调用时,结构大小是一个值。当函数返回时,结构大小是一个结果(我靠!这是跟我玩哲学么?)
常用的值-结果参数:
1 select 3个变量
2 getsockopt 长度变量
3 recvmsg msghdr中的两个成员:msg_namelen \ msg_controllen
4 ifconfig ifc_len
5 sysctl 前两个长度参数
小端字节序:低序字节存储在起始地址
大端字节序
验证大小端字节序:
1 int main(int argc,char ** argv){ 2 union{ shot s; 3 char c[sizeof(short)]; 4 }un; 5 un.s = 0x0102; 6 printf("%s:",CPU_VENDOR_OS); 7 if(sizeof(short) ==2){ 8 if(un.c[0]==1 && un.c[1]==2) 9 printf("big-endian\n"); 10 else if(un.c[0]==2 && un.c[1]==1) 11 printf("little-endian\n"); 12 else 13 printf("unknown\n"); 14 }else{ 15 printf("sizeof(short) = %d\n",sizeof(short)); 16 } 17 exit(0); 18 }
inet_aton 将字符串转换成32位的网络字节序的二进制值
inet_addr 全为1时,返回INADDR_NONE错误
inet_ntoa 将二进制转换成对应的点分十进制
inet_pton 从表达格式转换到数值格式
inet_ntop 从数值格式转换到表达格式
sock_ntop
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?