1.1. < sys/types.h >

primitive system data types(包含很多类型重定义,如pid_t、int8_t等)

1.2. < sys/socket.h >

//与套接字相关的函数声明和结构体定义,如socket()、bind()、connect()及struct sockaddr的定义等

int setsockopt(int s,int level,int optname,const void *optval,,socklen_toptlen);

用来设置参数s所指定的socket状态。参数level代表欲设置的网络层,一般设成SOL_SOCKET以存取socket层。参数optname代表欲设置的选项,有下列几种数值:

SO_DEBUG打开或关闭排错模式

SO_REUSEADDR允许在bind()过程中本地地址可重复使用

SO_TYPE返回socket形态。

SO_ERROR返回socket已发生的错误原因

SO_DONTROUTE送出的数据包不要利用路由设备来传输。

SO_BROADCAST使用广播方式传送

SO_SNDBUF设置送出的暂存区大小

SO_RCVBUF设置接收的暂存区大小

SO_KEEPALIVE定期确定连线是否已终止。

SO_OOBINLINE当接收到OOB 数据时会马上送至标准输入设备

SO_LINGER确保数据安全且可靠的传送出去。

optval代表欲设置的值,参数optlen则为optval的长度。

成功则返回0,若有错误则返回-1,错误原因存于errno。

EBADF参数s并非合法的socket处理代码。

ENOTSOCK参数s为一文件描述词,非socket。

ENOPROTOOPT参数optname指定的选项不正确。

EFAULT参数optval指针指向无法存取的内存空间。

getsockopt(取得socket状态)

int getsockopt(int s,int level,int optname,void* optval,socklen_t*optlen);

getsockopt()会将参数s所指定的socket状态返回。

参数:

optname代表欲取得何种选项状态

optval则指向欲保存结果的内存地址

optlen则为该空间的大小

level、optname请参考setsockopt()

成功则返回0,若有错误则返回-1,错误原因存于errno

EBADF参数s 并非合法的socket处理代码

ENOTSOCK参数s为一文件描述词,非socket

ENOPROTOOPT参数optname指定的选项不正确

EFAULT参数optval指针指向无法存取的内存空间

1.3. < sys/ioctl.h >

//I/O控制操作相关的函数声明,如ioctl()

1.4. < stdlib.h >

/某些结构体定义和宏定义,如EXIT_FAILURE、EXIT_SUCCESS等

1.5. < netdb.h >

定义主机的各项环境,包括结构hostent(主机环境), hostname,获得主机的信息的几个函数(gethostbyname), 如:gethostbyname()、gethostbyaddr()、herror()

某些结构体定义、宏定义,如struct hostent、struct servent、等

voidsetprotoent (int stayopen);

用来打开/etc/protocols,如果参数stayopen值为1,则接下来的getprotobyname()或getprotobynumber()将不会自动关闭此文件

void endprotoent(void);

用来关闭由getprotoent()打开的文件。

void setservent(int stayopen);

用来打开/etc/services,如果参数stayopen值为1,则接下来的getservbyname()或getservbyport()将补回自动关闭文件。

void endservent(void);

用来关闭由getservent()所打开的文件。

1.6. < unistd.h>

read,write,close

1.7. < poll.h>

//poll,pollfd

1.8. < net/ethernet.h>

包括几个以太网的数据结构,ether_addr(mac帧结构),ether_header(以太帧的头部)

1.9. < netinet/in.h>

某些结构体声明、宏定义,如struct sockaddr_in、PROTO_ICMP、INADDR_ANY等

1.10. < netinet/if_ether.h>

ether_arp的数据结构

1.11. < netinet/ether.h>

以太祯的网络字节和ascii字节的转换,包括ether_ntoa(),ether_aton这样的函数定义

1.12. < netinet/ip.h>

这个头文件和linux/ip.h似乎很相似,也有iphdr的数据结构,同时还包括了timestamp结构,我的理解是,linux文件夹下的 ip.h是linux黑客编写的ip头文件,而这个则是gnu一开始就定义的头文件,同时还包括了bsd中的ipheader结构定义。同理的还有该目录下的tcp.h等文件

1.13. < linux/ip.h>

iphdr的数据结构,以及一些ip层的数据定义,同理的还有tcp.h,udp.h等等

1.14. < linux/if.h>

主要的socket头文件,似乎修改自unix的if.h,定义了网卡的接口信息的宏,例如IFF_UP.另外有数个重要的interface的数据结构定义,包括ifreq,ifconf,ifmap

1.15. < linux/if_packet.h>

原始数据包的数据结构定义,包括sockaddr_pkt,sockaddr_ll,想接收原始数据包的不能错过这个文件。同理的还有if_ppp.h,if_tun.h等等

1.16. < arpa/inet.h>

某些函数声明,如inet_ntop()、inet_ntoa()等

注:原博客,由于无法转载,故复制至此便于查阅,谢谢原博主!

Unix网络编程 — 头文件解析的更多相关文章

  1. UNIX网络编程之旅-配置unp.h头文件环境

    最近在学习Unix网络编程(UNP),书中steven在处理网络编程时只用了一个#include “unp.h”  相当有个性并且也很便捷 于是我把第三版的源代码编译实现了这个过程,算是一种个性化的开 ...

  2. 《Unix 网络编程》11:名字和地址转换

    名字和地址转换 系列文章导航:<Unix 网络编程>笔记 域名系统 简介 域名系统主要用于主机名字和 IP 地址之间的映射.主机名可以是: 简单名字,如:centos01 全限定域名(FQ ...

  3. 记录一次配置unix网络编程环境的过程和遇到的问题

    记录一次搭建unix网络编程环境过程中遇到的问题和总结 计算机环境虚拟机 linuxmint-18-xfce-64bit 1.打开unix网络编程.iso 把目录下的文件复制到某一目录,修改权限,可命 ...

  4. 《UNIX网络编程》TCP客户端服务器例子

    最近在看<UNIX网络编程>(简称unp)和<Linux程序设计>,对于unp中第一个获取服务器时间的例子,实践起来总是有点头痛的,因为作者将声明全部包含在了unp.h里,导致 ...

  5. unix网络编程环境搭建

    unix网络编程环境搭建 网络编程 环境 1.点击下载源代码 可以通过下列官网中的源代码目录下载最新代码: http://www.unpbook.com/src.html 2.解压文件 tar -xz ...

  6. UNIX网络编程——原始套接字的魔力【续】

    如何从链路层直接发送数据帧 上一篇里面提到的是从链路层"收发"数据,该篇是从链路层发送数据帧. 上一节我们主要研究了如何从链路层直接接收数据帧,可以通过bind函数来将原始套接字绑 ...

  7. 【UNIX网络编程第三版】阅读笔记(一):代码环境搭建

    粗略的阅读过<TCP/IP详解>和<计算机网络(第五版)>后,开始啃这本<UNIX网络编程卷一:套接字联网API>,目前linux下的编程不算太了解,在阅读的过程中 ...

  8. 《UNIX网络编程 卷1》之"学习环境搭建"(CentOS 7)

    <UNIX网络编程 卷1>的源码可以从www.unpbook.com下载得到.解压之后的目录为unpv13e. 详细步骤 编译 进入unpv13e目录,按如下步骤编译: ./configu ...

  9. 16.unix网络编程一卷 unp.h

    unix网络编程 --ubuntu下建立编译环境 1.安装编译器,安装build-essential sudo apt-get install build-essential 2.下载本书的头文件 下 ...

随机推荐

  1. 【HDU - 1241】Oil Deposits(dfs+染色)

    Oil Deposits Descriptions: The GeoSurvComp geologic survey company is responsible for detecting unde ...

  2. python的安装教学

    1.首先登陆到python的官方网站 https://www.python.org/ 2.鼠标放在Download上,点击下面对应的型号,我的是Windows 3.点击Windows到此页面,点击3. ...

  3. Unix\Linux | 总结笔记 | 命令_ WC

    wc[选项][参数] wc命令用来计算数字.利用wc指令我们可以计算文件的Byte数.字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据. -c或--byt ...

  4. python的Debug调试

    先打开Shell的Debug-->Debugger调试, 然后点击程序的运行 点击Debug的step按钮查看每一步的结果

  5. C#课程设计

    一.问题描述 监视文件和文件夹的变化(FileSystemWatcher 类):选择一个文件夹,单击"开始监视",该文件夹处于监视状态,此时对该文件夹如果进行操作,这些行为将显示出 ...

  6. ACM_送气球(规律题)

    送气球 Time Limit: 2000/1000ms (Java/Others) Problem Description: 为了奖励近段时间辛苦刷题的ACMer,会长决定给正在机房刷题的他们送气球. ...

  7. 使用HttpClient携带证书报错_Certificate for <IP> doesn't match any of the subject alternative names:[域名]

    使用HttpClient携带pfx证书通过Https协议发送SOUP报文调用WebService接口时报如下错误: Exception in thread "main" javax ...

  8. github下载下来的C#控制台小游戏[含源码]

    早就听说了github是世界最大的源码库,但自己却不是很懂,今天去研究了下,注册了一个帐号,然后在上面搜索了一下C# game,然后发现有许多的游戏. 随意地选择了一个,感觉比较简单,于是就下载了下来 ...

  9. Oracle代码 规则 创建表 表空间 用户等

    -----创建表空间----------create tablespace bdccslogging datafile 'D:\oracle\product\10.2.0\oradata\bdccs\ ...

  10. java单元测试注释执行顺序

    JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before 在测试方法运行之前运行 @Test 测试方法 @Afte ...