目录
前言:
总结一些编程时遇到的函数,会依次按照所需包含头文件、功能、返回值和参数的顺序来介绍,资料参考man手册和互联网。
time()
time_t time(time_t *tloc);
头文件:#include <time.h>
功能:time()函数返回1970-01-01 00:00:00+0000(UTC)以来的秒数。(返回时间戳)
返回值:使用成功返回1970-01-01 00:00:00+0000(UTC)以来的秒数,(返回时间戳);错误返回-1,并设置错误码
参数:如果参数为空,正常返回时间戳,如果参数不为空,则返回的同时将时间戳保存到tloc参数所指向的地址中。
time_t 类型实质为长整型
socket()
int socket(int domain, int type, int protocol);
头文件:#include <sys/types.h>
#include <sys/socket.h>
功能:创建网络套接字用于进行网络通信。
返回值:创建成功返回新套接字的文件描述符,错误返回-1,并设置错误码
参数:
第一个参数 (int domain):指定通信协议的类型,这些系列在《sys/socket.h》中定义。目前已知的格式包括:
协议名字 | 功能 |
AF_UNIX,AF_LOCAL | 实现本地通信 |
AF_INET | IPv4协议 |
AF_INET6 | IPv6协议 |
AF_IPX | IPX协议 |
AF_NETLINK | 内核用户通信界面 |
AF_X25 | |
AF_AX25 | 业余无线电通信协议 |
AF_ATMPVC | |
AF_APPLETALK | 苹果公司定制的协议 |
AF_PACKET | |
AF_ALG | 内核加密API接口 |
第二个参数(int type):指定套接字的通信类型。目前一直选项包括:
SOCK_STREAM | 提供流式套接字,这种套接字提供了双向的、 可靠的、基于连接的字节流服务。 TCP协议就是使用这种套接字。 |
SOCK_DGRAM | 提供数据报套接字,这种套接字提供了无连接、 不可靠的数据报服务。 UDP协议就是使用的这种套接字 |
SOCK_SEQPACKET | 表示顺序数据包套接字,通常在SCTP协议中使用。 提供长度固定、有序、可靠的面向连接报文传递服务。 在使用时,从套接字接收的数据量和对端发送的数据量必须匹配, 即必须将这个包完整的接收才能进行读取。 |
SOCK_RAW | 提供原始套接字。 |
SOCK_RDM | 提供可靠的数据包连接 |
SOCK_PACKET | 过时方案。 |
第三个参数(int protocol):通常设置为0,表示选择使用默认协议。需要选择特定协议,也可以指定它。
setsockopt()
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
头文件:#include <sys/types.h>
#include <sys/socket.h>
功能:用于设置套接字选项,达到修改套接字的行为或性能,以适应特定的网络环境和应用程序需求。
返回值:成功时返回0,表示操作成功完成,如果函数调用失败,返回-1,并设置全局变量errno说明错误原因。
参数:
第一个参数(int sockfd):将要被设置的套接字
第二个参数(int level):将要设置选项的层次。
选项 | 功能 |
SOL_SOCKET | 表示基本的套接字选项 |
IPPROTO_TCP | 表示TCP协议选项 |
IPPROTO_IP | 表示IP协议选项 |
IPPROTO_IPV6 | 表示IPv6协议选项 |
第三个参数(int optname):设置的具体的选项名,不同的level和optname组合,支持的选项名也会有所不同,一些常见的选项包括:
选项 | 功能 |
SO_REUSEADDR | 设置地址重用, 解决bind()失败的问题。 |
SO_REUSEPORT | 设置端口重用, 解决多进程同时监听同一端口的问题。 |
第四个参数(const void *optval):一个用来指向设置选项值缓冲区的指针。
第五个参数(socklen_t optlen):表示optval缓冲区长度。