UNIX网络编程读书笔记:地址操纵函数
地址格式转换函数:它们在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网络编程读书笔记:地址操纵函数的更多相关文章
- UNIX网络编程读书笔记:shutdown函数
终止网络连接的通常方法是调用close函数.不过close有两个限制,却可以使用shutdown来避免. close 把描述字的引用计数减1,仅在该计数变为0时才关闭套接口.使用shutdown可以不 ...
- UNIX网络编程读书笔记:select函数
select函数概况: select函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或多个事件发生或经历一段指定的时间后才唤醒它. 作为一个例子,我们可以调用select,告知内核仅在下 ...
- UNIX网络编程读书笔记:poll函数
poll函数提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息. poll函数原型 #include <poll.h> int poll(struct pollfd * ...
- UNIX网络编程读书笔记:pselect函数
函数原型 pselect函数是由POSIX发明的,其原型如下: #include <sys/select.h> #include <signal.h> #include < ...
- UNIX网络编程--读书笔记
会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...
- UNIX网络编程读书笔记:简介
认知套接口编程接口 理解原始套接口(raw socket)的概念 值得注意的是,客户和服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栈的一部分. 上图中在TCP和UDP之间留有间隙 ...
- UNIX网络编程读书笔记:原始套接口
概述 应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket).http://www.cnblogs.com/nufangrensheng/p/3583435.ht ...
- UNIX网络编程读书笔记:UNIX域协议
概述 UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所用的API(套接口API)相同.UNIX域协议可视为进程间通信 ...
- UNIX网络编程读书笔记:套接口选项
概述 有很多方法来获取和设置影响套接口的选项: getsockopt和setsockopt函数 fcntl函数 ioctl函数 getsockopt和setsockopt函数 这两个函数仅用于套接口. ...
随机推荐
- Process Explorer常用操作介绍
(未获得作者本人同意,严禁转载) Process Explorer出现的背景 Process Explorer可以看成是一个加强版的任务管理器.在较早的Windows版本中,任务管理器提供的功能是非常 ...
- 【BZOJ 2054】 2054: 疯狂的馒头 (并查集特技)
Input 第一行四个正整数N,M,p,q Output 一共输出N行,第i行表示第i个馒头的最终颜色(如果最终颜色是白色就输出0). Sample Input 4 3 2 4 Sample Outp ...
- 2018ECfinal J. Philosophical Balance
2018ECfinal J. Philosophical Balance 题目大意: 给出一个字符串 \(s\) ,你需要给每一个 \(i\) 一个 \([0,1]\) 之间的权值 \(k_i\) , ...
- java_es
在查询时过滤掉指定的"_id"的数据 GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();// 对 ...
- python - 在Windows系统中安装Pygame及导入Eclipse
环境:python3.6(只有一个版本)+ windows10(64 bit) + Eclipse+pydev python3.6安装完成后,会自带 easy_install 和 pip3,在Win ...
- 将dll文件注入到其他进程中的一种新方法
http://www.45it.com/windowszh/201212/33946.htm http://www.hx95.cn/Article/OS/201212/65095.html 我们知道将 ...
- Druid 常见问题
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
- Spring依赖检查
在Spring中,可以使用依赖检查功能,以确保所要求的属性可设置或者注入. 依赖检查模式 4个依赖检查支持的模式: none – 没有依赖检查,这是默认的模式. simple – 如果基本类型(int ...
- 自己动手写js分享插件 [支持https] (可以分享QQ空间,微信,新浪微博。。。)
由于百度分享,jiathis 等分享插件在https下均会报错,就萌生了自己动手写一个分享插件的念头,其实实现起来一点都不难,以下代码都已在https网站运行通过,特附上以下代码:还请各位看官不吝赐教 ...
- Starling 2D框架简介(一)
本系列是对Introducing Starling pdf的翻译,下文是对adobe开发人员中心的一片日志的转载,地址为http://www.adobe.com/cn/devnet/flashplay ...