地址格式转换函数:它们在ASCII字符串(人们比较喜欢用的格式)与网络字节序的二进制值(此值存于套接口地址结构中)间转换地址。

1、inet_aton、inet_addr、inet_ntoa

inet_aton、inet_addr和inet_ntoa在点分十进制数串(例如,”206.168.112.96“)与它的32位网络字节序二进制值间转换IPv4地址。

#include <arpa/inet.h>

int inet_aton(const char *strptr, struct in_addr *addrptr);
返回:1——串有效,0——串有错 int_addr_t inet_addr(const char *strptr);
返回:若成功,返回32位二进制网络字节序地址;若有错,则返回INADDR_NONE char *inet_ntoa(struct in_addr inaddr);
返回:指向点分十进制数串的指针

inet_aton将strptr所指的C字符串转换成32位网络字节序二进制值,并通过指针addrptr来存储。如果成功返回1,否则返回0.

inet_addr进行与inet_aton相同的转换,返回值为32位的网络字节序二进制值。这个函数存在这样的问题:所有2^32个可能的二进制值都是有效的IP地址(从0.0.0.0到255.255.255.255),但当出错时返回一个常量INADDR_NONE(一般为一个32位均为1的值)。这就意味着点分十进制数串255.255.255.255(这是IPv4的有限广播地址)不能由此函数处理,因为它的二进制值被用来指示函数失败。

inet_ntoa将一个32位的网络字节序二进制IPv4地址转换成相应的点分十进制数串。由函数返回值所指的串驻留在静态内存中,这意味着函数是不可重入的。

2、inet_pton和inet_ntop函数

inet_pton和inet_ntop是两个较新的函数,对IPv4和IPv6地址都能处理。字母p代表presentation,字母n代表numeric。地址的表达(presentation)格式通常是ASCII串,数值(numeric)格式则是存在于套接口地址结构中的二进制值。

#include <arpa/inet.h>

int inet_pton(int family, const char *strptr, void *addrptr);
返回:1——成功,0——输入不是有效的表达式格式,-1——出错 const char *inet_ntop(int family, const void *addrptr,
char *strptr, size_t len);
返回:成功——指向结果的指针,出错——NULL

两个函数的参数family既可以是AF_INET,也可以是AF_INET6. 如果以不被支持的地址族作为family参数,两个函数都返回错误,并将errno置为EAFNOSUPPORT。

inet_pton函数转换由指针strptr所指的串,通过指针addrptr存储二进制结果。如果成功,则返回值为1;如果对于指定的family输入串不是有效的表达格式,则返回为0.

inet_ntop函数进行相反的转换,即从数值格式(addrptr)到表达式(strptr)进行转换。参数len是目标的大小,以免函数溢出其调用者的缓冲区。为了有助于规定这个大小,在头文件<netinet/in.h>中有如下定义:

#define INET_ADDRSTRLEN    16    /* for IPv4 dotted-decimal */
#define INET6_ADDRSTRLEN 46 /* for IPv6 hex string */

如果len太小,无法容纳表达格式结果(包括终止的空字符),则返回一个空指针,并将errno设置为ENOSPC。

函数inet_ntop的参数strptr不能是个空指针,调用者必须为目标分配内存并指定大小。成功时,此指针即函数的返回值。

 

其他地址操纵函数:

UNIX网络编程读书笔记:地址操纵函数的更多相关文章

  1. UNIX网络编程读书笔记:shutdown函数

    终止网络连接的通常方法是调用close函数.不过close有两个限制,却可以使用shutdown来避免. close 把描述字的引用计数减1,仅在该计数变为0时才关闭套接口.使用shutdown可以不 ...

  2. UNIX网络编程读书笔记:select函数

    select函数概况: select函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或多个事件发生或经历一段指定的时间后才唤醒它. 作为一个例子,我们可以调用select,告知内核仅在下 ...

  3. UNIX网络编程读书笔记:poll函数

    poll函数提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息. poll函数原型 #include <poll.h> int poll(struct pollfd * ...

  4. UNIX网络编程读书笔记:pselect函数

    函数原型 pselect函数是由POSIX发明的,其原型如下: #include <sys/select.h> #include <signal.h> #include < ...

  5. UNIX网络编程--读书笔记

    会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...

  6. UNIX网络编程读书笔记:简介

    认知套接口编程接口 理解原始套接口(raw socket)的概念   值得注意的是,客户和服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栈的一部分. 上图中在TCP和UDP之间留有间隙 ...

  7. UNIX网络编程读书笔记:原始套接口

    概述 应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket).http://www.cnblogs.com/nufangrensheng/p/3583435.ht ...

  8. UNIX网络编程读书笔记:UNIX域协议

    概述 UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所用的API(套接口API)相同.UNIX域协议可视为进程间通信 ...

  9. UNIX网络编程读书笔记:套接口选项

    概述 有很多方法来获取和设置影响套接口的选项: getsockopt和setsockopt函数 fcntl函数 ioctl函数 getsockopt和setsockopt函数 这两个函数仅用于套接口. ...

随机推荐

  1. 常用排序算法的Python实现

    冒泡排序 算法思想: 对于一组需要排序的数据,对于相邻的两个数进行比较,使较大(或者较小)的数一直向后推,经过多层排序之后,使整个序列是有序的. 算法实现: def bubble_sort(L): l ...

  2. session_write_close() 用法

    1.需要session控制的大文件下载,防止因为占用session文件时间太久,导致其他页面的session无法执行 session_write_close() worked as a lifesav ...

  3. 谈HTTPS中间人攻击与证书校验(一)

    一.前言 随着安全的普及,https通信应用越发广泛,但是由于对https不熟悉导致开发人员频繁错误的使用https,例如最常见的是未校验https证书从而导致“中间人攻击”,并且由于修复方案也一直是 ...

  4. 20162327WJH四则运算第二周总结

    学号 20162327 <程序设计与数据结构>四则运算第二次实验报告 1.需求分析 1.本周我们进行了四则运算的后续完善,因为学习的比较欠缺,所以我负责比较简单的部分,就是只包含一个运算符 ...

  5. js实现大转盘抽奖游戏实例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. LM27313 (ACTIVE) 具有 30V 内部 FET 开关(采用 SOT-23 封装)的 1.6 MHz 升压转换器

    The LM27313 switching regulator is a current-mode boost converter with a fixed operating frequency o ...

  7. Spring依赖检查

    在Spring中,可以使用依赖检查功能,以确保所要求的属性可设置或者注入. 依赖检查模式 4个依赖检查支持的模式: none – 没有依赖检查,这是默认的模式. simple – 如果基本类型(int ...

  8. pm2-web

    A web based monitor for PM2. Multiple hosts With the release of 0.11 pm2 no longer uses TCP sockets ...

  9. python接口自动化16-multipart/form-data上传图片

    前言 在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片 上传接口 1.以禅道上提交bug为例,在选择图片时,点确定按钮,就是上传图片了 2.用 ...

  10. JMS基本概念之二

    JMS规范  JMS定义了Java中访问消息中间件的接口,并没有给予实现,实现JMS接口的消息中间件称为JMS Provider,例如ActiveMQ JMS provider: 实现JMS接口和规范 ...