UNP 学习笔记

来源:互联网 发布:网络共享服务器 反应慢 编辑:程序博客网 时间:2024/05/14 10:56
UNP 学习笔记

3 socket编程简介
3.1 概述

3.2 socket地址结构
socket函数都需要一个指向socket地址结构的指针作为参数。
每个协议族都定义它自己的socket地址结构,以sockaddr_开头

例IPv4 socket的地址结构

struct in_addr {in_addr_t s_addr;};// IPv4 socket address struct sockaddr_in {uint8_t sin_len;/* length of structure 16 */as_family_t sin_family;/* AF_INET */in_port_t sin_port;/* 16b TCP/UDP port number *//* network byte ordered */struct in_addr sin_addr;/* 32b IPv4 address *//* network byte ordered */char sin_zero[8];/* unused */};


socket函数必须处理来自任何协议族的socket地址结构,解决方案是
在sys/socket.h中定义一个通用的socket地址结构

// general socket addressstruct sockaddr {uint8_tsa_len;sa_family_tsa_family;charsa_data[14];};
对于特定协议族,就进行类型强制转换变成通用socket地址结构
例如

struct sockaddr_in serv;bind(sockfd, (struct sockaddr *)&serv, sizeof(serv));


3.4 字节排序函数
为了整合MSB/LSB的差别,指定一个网络字节序
在 netinet/in.h 中

// host order to net orderuint16_t htons(uint16_t host16bitvalue);uint32_t htons(uint32_t host32bitvalue);// net order to host orderuint16_t ntohs(uint16_t net16bitvalue);uint32_t ntohs(uint32_t net16bitvalue);



0 0
原创粉丝点击