Unix网络编程 — 头文件解析
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网络编程 — 头文件解析的更多相关文章
- UNIX网络编程之旅-配置unp.h头文件环境
最近在学习Unix网络编程(UNP),书中steven在处理网络编程时只用了一个#include “unp.h” 相当有个性并且也很便捷 于是我把第三版的源代码编译实现了这个过程,算是一种个性化的开 ...
- 《Unix 网络编程》11:名字和地址转换
名字和地址转换 系列文章导航:<Unix 网络编程>笔记 域名系统 简介 域名系统主要用于主机名字和 IP 地址之间的映射.主机名可以是: 简单名字,如:centos01 全限定域名(FQ ...
- 记录一次配置unix网络编程环境的过程和遇到的问题
记录一次搭建unix网络编程环境过程中遇到的问题和总结 计算机环境虚拟机 linuxmint-18-xfce-64bit 1.打开unix网络编程.iso 把目录下的文件复制到某一目录,修改权限,可命 ...
- 《UNIX网络编程》TCP客户端服务器例子
最近在看<UNIX网络编程>(简称unp)和<Linux程序设计>,对于unp中第一个获取服务器时间的例子,实践起来总是有点头痛的,因为作者将声明全部包含在了unp.h里,导致 ...
- unix网络编程环境搭建
unix网络编程环境搭建 网络编程 环境 1.点击下载源代码 可以通过下列官网中的源代码目录下载最新代码: http://www.unpbook.com/src.html 2.解压文件 tar -xz ...
- UNIX网络编程——原始套接字的魔力【续】
如何从链路层直接发送数据帧 上一篇里面提到的是从链路层"收发"数据,该篇是从链路层发送数据帧. 上一节我们主要研究了如何从链路层直接接收数据帧,可以通过bind函数来将原始套接字绑 ...
- 【UNIX网络编程第三版】阅读笔记(一):代码环境搭建
粗略的阅读过<TCP/IP详解>和<计算机网络(第五版)>后,开始啃这本<UNIX网络编程卷一:套接字联网API>,目前linux下的编程不算太了解,在阅读的过程中 ...
- 《UNIX网络编程 卷1》之"学习环境搭建"(CentOS 7)
<UNIX网络编程 卷1>的源码可以从www.unpbook.com下载得到.解压之后的目录为unpv13e. 详细步骤 编译 进入unpv13e目录,按如下步骤编译: ./configu ...
- 16.unix网络编程一卷 unp.h
unix网络编程 --ubuntu下建立编译环境 1.安装编译器,安装build-essential sudo apt-get install build-essential 2.下载本书的头文件 下 ...
随机推荐
- mysql 循环批量插入
背景 前几天在MySql上做分页时,看到有博文说使用 limit 0,10 方式分页会有丢数据问题,有人又说不会,于是想自己测试一下.测试时没有数据,便安装了一个MySql,建了张表,在建了个whil ...
- Light oj 1002 Country Roads (Dijkstra)
题目连接: http://www.lightoj.com/volume_showproblem.php?problem=1002 题目描述: 有n个城市,从0到n-1开始编号,n个城市之间有m条边,中 ...
- _bzoj1500 [NOI2005]维修数列【真·Splay】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1500 注意MAX-SUM的时候,不可以是空串. #include <cstdio> ...
- 转 Docker和hadoop
2017-06-21 朱洁 Docker很热,怎么形容?感觉开源除了spark技术,就是docker了,甚至把Go语言也带火了,把Go在TIOBE的排名从百名外带入主流语言的行列. Docker快成救 ...
- 实现php间隔一段时间执行一次某段代码
<?php ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行. set_time_limit(0); // 执行时间为无限制,php ...
- redis的安装使用以及一些常用的命令
Redis是一个key-value存储系统.并提供多种语言的API,我们可使用它构建高性能,可扩展的Web应用程序.目前越来越多的网站用它来当做缓存,减轻服务器的压力. 本文安装用的到redis是绿色 ...
- .NET 使用 Highcharts生成扇形图 柱形图
1.首先新建一个.NET网站,如图所示: 2.引用所需要的js类库,如下图 highcharts.js可以在网上搜索就可以找到下载了. 3.在Default.aspx页面引用js 4.在 body 下 ...
- 集成新版(5.17+)Activiti Modeler与Rest服务
声明: 此教程适合Activiti 5.17+版本. 本博客所涉及的内容均可在kft-activiti-demo中找到. 在线demo可以访问 http://demo.kafeitu.me:8080/ ...
- Android(java)学习笔记194:ContentProvider使用之获得系统联系人信息02(掌握)
1.重要: 系统删除一个联系人,默认情况下并不是把这个联系人直接删除掉了,只是做了一个标记,标记为被删除. 2.前面一讲说过了如何获取系统联系人信息(通过ContentProvider),获取联系人信 ...
- es6 基础语法
var c= 1 <!--都不能预解析-->let a = 1//const不能修改变量const b = 1 箭头函数 =>var c = function fun(a, b) { ...