unix网络编程常用的头文件(持续更新)

1.1.      <sys/types.h>

primitive system data types(包含很多类型重定义,如pid_tint8_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则为该空间的大小

leveloptname请参考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_FAILUREEXIT_SUCCESS

1.5.      <netdb.h>

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

 

某些结构体定义、宏定义,如struct hostentstruct 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_addrmac帧结构),ether_header(以太帧的头部)

 

1.9.      <netinet/in.h>

某些结构体声明、宏定义,如struct sockaddr_inPROTO_ICMPINADDR_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.hlinux黑客编写的ip头文件,而这个则是gnu一开始就定义的头文件,同时还包括了bsd中的ipheader结构定义。同理的还有该目录下的tcp.h等文件

 

1.13. <linux/ip.h>

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

 

1.14. <linux/if.h>

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

 

1.15. <linux/if_packet.h>

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

 

1.16. <arpa/inet.h>

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

你可能感兴趣的:(unix网络编程常用的头文件(持续更新))