套接口编程简介

1、套接口地址结构

POSIX规范只需要结构中的三个成员:sin_family、sin_addr、sin_port。其中sin_addr又是一个结构

2、通用套接口地址结构

套接口函数被定义为采用指向通用套接口地址结构的指针。由于套接口函数的定义并没有使用void*指针类型,

所以调用套接口函数时必须进行强制类型转换。

使用通用套接口地址结构的原因:内核必须依据通用套接口地址结,检查sin_family的值来确定结构的类型

3、字节排序函数

多字节数据在内存中存储有两种方法。小端字节序把低字节存储在起始地址;大端字节序高序字节存储在起始地址。

POSIX规范规定,套接口地址结构中一些成员按网络字节序进行维护,所以必须注意主机字节序和网络字节序之间

的转换。

#include <netinet/in.h>

返回网络字节序值

uint16_t htons (uint16_t)

uint32_t htonl (uint32_t)

返回主机字节序值

uint16_t ntohs (uint16_t)

uint32_t ntohl (uint32_t)

4、地址转换函数

地址转换函数用于ASCII字符串和网络字节序的二进制值间转换地址

#include <arpa/inet.h>

int inet_aton(const char *strptr, struct in_addr *addrptr)

把strptr所指的字符串转换为32位的网络字节序二进制值,把结果保存在addrptr中。成功返回1,失败返回0。

in_addr_t inet_addr (const char *strptr)

返回32位网络字节序二进制值。失败时返回一个常值INADDR_NONE(255.255.255.255),所以该函数不能处理

点分十进制数串255.255.255.255

char *inet_ntoa (struct in_addr inaddr)

将32位网络字节序二进制值转换成点分十进制数串。

下面两个转换函数对ipv4和ipv6地址都能处理。

#include <arpa/inet.h>

点分十进制到二进制转换

int inet_pton (int family, const char *strptr, void *addrptr)

二进制到点分十进制转换

const char *inet_ntop (int family, const void *addrptr, char *strptr, size_t len)

生活不止眼前的苟且 还有诗和远方的田野
原文地址:https://www.cnblogs.com/jc-nogame/p/4347078.html