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函数 这两个函数仅用于套接口. ...
随机推荐
- [BOI2004]Sequence
题面描述 给定整数数组$a_1,a_2,a_3...a_n$,求递增数组$b_1,b_2,b_3...b_n$ 使得$|a_1 - b_1| + |a_2 - b_2| + ... + |a_n - ...
- [CodeForces-178F]Representative Sampling
题目大意: 给你n个字符串,要求从中选出k个字符串,使得字符串两两lcp之和最大. 思路: 动态规划. 首先将所有的字符串排序,求出相邻两个字符串的lcp长度(很显然,对于某一个字符串,和它lcp最长 ...
- 三、python的数据类型 列表、元组、字典
1.list 列表 列表是由一序列特定顺序排列的元素组成的.可以把字符串,数字,字典等都可以任何东西加入到列表中,列表中的元素之间没有任何关系.列表也是自带下标的,默认也还是从0开始. List常用的 ...
- 不按装mysql情况下,php安装pdo_mysql
安装pdo时遇到 --with-pdo-mysql 这个要指向mysql安装目录:可是我这台机器不安装mysql; 解决方法: [root@localhost app]# yum install ...
- leetcode644. Maximum Average Subarray II
leetcode644. Maximum Average Subarray II 题意: 给定由n个整数组成的数组,找到长度大于或等于k的连续子阵列,其具有最大平均值.您需要输出最大平均值. 思路: ...
- hihocoder1489 Legendary Items (微软2017年预科生计划在线编程笔试)
http://hihocoder.com/problemset/problem/1489 笔试题第一道,虽然说第一道都很水,但是我感觉这题不算特别水把..这道题我就卡住了我记得,tle,最后只有30分 ...
- C#利用NPOI在同一个Excel文件中创建多个sheet
借用NPOI来实现,要在同一Excel文件中创建多个sheet,只需要在同一个workbook中创建多个sheet即可.要注意的是,sheet的名字一定不能重复.下面是实现的代码: private v ...
- 利用Lucene与Nutch构建简单的全文搜索引擎
文章地址 1.简介 本次实现分为两个部分,第一个部分是利用Lucene构建一个全文的搜索引擎,另外一部分则是利用Nutch实现同样的功能.由于Lucene并不是一个可以直接运行的程序,且不具备爬虫和文 ...
- Homebrew-macOS缺失的软件包管理器(简称brew)
[简介] brew又叫Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,只需要一个简单的命令,非常方便 [遇到的问题] 在真正了解软件包管理工具之前,一直是 ...
- Ext各种对话框
<HTML> <HEAD> <TITLE>选择确认对话框</TITLE> <link rel="stylesheet" typ ...