訾颀秀 发表于 2025-6-7 10:13:24

TCP相关的函数接口

TCP是一种面向连接的通信,可以保证数据包的可靠交付,数据包的头部不包含选项字节和数据为20个字节
socket函数

此函数用于创建一个套接字文件,用于网络通信
int socket(int domain, int type, int protocol);
//domain:协议族,如 AF_INET(IPv4)、AF_INET6(IPv6)
//type:Socket 类型,如 SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)。
//protocol:协议编号,通常为 0,表示使用默认协议。
//ret:成功返回 Socket 描述符,失败返回 -1bind函数

用于把创建的套接字和本地地址以及端口进行绑定
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
//sockfd:Socket 描述符
//addr:指向 sockaddr 结构的指针,包含 IP 地址和端口号
//addrlen:addr 的长度
//ret:成功返回 0,失败返回 -1。connect函数

用于建立客户端与服务器之间连接的系统调用
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
//sockfd:Socket 描述符
//addr:指向 sockaddr 结构的指针,要连接的IP地址和端口号
//addrlen:addr 指针所指向的地址结构的长度(以字节为单位)
//ret:成功返回 0,失败返回 -1listen函数

用于将一个套接字置于监听状态,以便接受来自客户端的连接请求
int listen(int sockfd, int backlog);
//sockfd:创建并绑定到本地地址的套接字描述符
//backlog:指定等待连接的队列的最大长度
//ret:成功返回 0,失败返回 -1accept函数

此函数用于接受客户端的连接请求,并为每个连接创建一个新的套接字
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
//sockfd:已经处于监听状态的套接字描述符
//addr:用于存储发起连接的客户端的地址信息
//addrlen:addr 结构的长度
//ret:成功:返回一个新的套接字描述符,用于与客户端进行通信;失败返回 -1send函数

sendto、sendmsg、write函数也可以实现发送数据的功能
此函数通过套接字发送数据
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
//sockfd:已经建立连接的套接字描述符
//buf:发送缓冲区
//len:要发送的数据的长度
//flags:于指定发送操作的标志。通常设置为 0
//ret:成功,返回实际发送的字节数。失败返回 -1recv函数

read、recvfrom、recvmsg函数也可以实现接受数据的功能
此函数通过套接字接收数据的系统调用
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
//sockfd:已经建立连接的套接字描述符
//buf:接收缓冲区
//len:缓冲区的长度(以字节为单位),表示可以接收的最大数据量
//flags:用于指定接收操作的标志。通常设置为 0
//ret:成功返回实际接收到的字节数。如果返回值为 0,表示对端已经关闭连接。失败返回-1客户端流程

socket
connect
write
服务器流程

socket
bind
listen
accept
read
getsockopt函数

此函数用于获取套接字选项值的
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
//sockfd:套接字描述符
//level:指定要操作的协议级别IPPROTO_TCP:TCP 协议相关的选项
//optname:指定要查询的套接字选项名称SO_RCVBUF:接收缓冲区大小SO_SNDBUF:发送缓冲区大小
//optval:存储选项值的缓冲区的指针
//optlen:optval 缓冲区长度的指针
//ret:成功返回 0,失败返回 -1setsockopt函数

此函数用于设置套接字的选项值
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
//sockfd:套接字描述符
//level:指定要操作的协议级别IPPROTO_TCP:TCP 协议相关的选项
//optname:指定要查询的套接字选项名称SO_RCVBUF:接收缓冲区大小SO_SNDBUF:发送缓冲区大小
//optval:存储选项值的缓冲区的指针
//optlen:optval 缓冲区长度
//ret:成功返回 0,失败返回 -1OOB带外数据

可以将紧急数据设定为带外(Out of Band)数据,通过特殊的标志位,让数据到达接收方后可以不受缓冲区和水位线的限制,让接收方可以优先读取,此时函数需要使用send和recv来进行数据的收发,并且将函数的标志位设置为MSG_OOB;
实现的方式:当服务器的内核收到携带有外带的数据之后,会向应用层发送SIGURG信号,应用层需要设置相关的函数接口进行处理
select函数

此函数可以用于多路复用
#include int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);//nfds:所有集合中的文件描述符的最大值+1//readfds:需要监视的可读文件描述符集合//writefds:需要监视的可写文件描述符集合//exceptfds:需要监视的异常条件文件描述符集合//timeout:超时时间,如果为0,立即返回不会阻塞//ret:>0:返回值是准备好文件描述符的数量=0:超时,没有文件描述符准备好
页: [1]
查看完整版本: TCP相关的函数接口