找回密码
 立即注册
首页 业界区 科技 TCP相关的函数接口

TCP相关的函数接口

訾颀秀 2025-6-7 10:13:24
TCP是一种面向连接的通信,可以保证数据包的可靠交付,数据包的头部不包含选项字节和数据为20个字节
socket函数

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

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

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

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

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

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

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

socket
connect
write
服务器流程

socket
bind
listen
accept
read
getsockopt函数

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

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

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

此函数可以用于多路复用
[code]#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:超时,没有文件描述符准备好
您需要登录后才可以回帖 登录 | 立即注册