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. 项目Alpha版本发布

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 这个作业的要求在哪里 https://edu.cnbl ...

  2. Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger

    myeclipse 新建web项目,报错Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger,查看项目中已经有引入了 ...

  3. 题解报告:hdu 2084 数塔(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...

  4. poj2573Bridge(过桥问题)

    链接 A,B为最快和次快 有两种方式可以使c,d过桥 一是a与c一起走,a回来接d再与d一起走,一直到对岸人为0为止 而是 a与b一起走 a回来送灯 c与d一起走 b回来送灯 重复此过程. 只剩2人时 ...

  5. esp8266 串口通讯

    1.发送 调用uart_init(115200,115200);初始化串口,波特率设置为115200.前面一个是设置uart0的波特率.后面一个是设置.uart的波特率 然后就可以使用uart0_tx ...

  6. 读《实战 GUI 产品的自动化测试》之:第四步,高阶技巧

    转自:http://www.ibm.com/developerworks/cn/rational/r-cn-guiautotesting4/ 定义测试控件库 本系列前几篇文章对 IBM 框架做了介绍, ...

  7. Java语法基础-异常处理

    异常处理类层次结构图 检查异常与非检查异常 非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类.javac在编译时,不会提示和发现这 ...

  8. 使用Jenkins进行android项目的自动构建(5)

    之前在项目中引入的单元测试使用的是JUnit,可以在构建前进行测试,这里在介绍一下使用Instrumentation 进行单元测试.使用Instrumentation进行测试,比之前多一些步骤,需要把 ...

  9. jQuery核心语法

    .each只是处理jQuery对象的方法,jQuery还提供了一个通用的jQuery.each方法,用来处理对象和数组的遍历 jQuery/($).each(array, callback )jQue ...

  10. springMVC返回Base64位编码图片验证码

    import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;impor ...