TCP服务端

进入等待连接请求状态

#include <sys/socket.h>

int listen(int sock, int backlog);

/**
 * sock:    希望进入等待连接请求状态的套接字文件描述符
 * backlog: 连接请求等待队列的长度
*/

成功则返回0,失败则返回-1

受理客户端连接请求

#include <sys/socket.h>

int accept(int sock, struct sockaddr *addr, socklen_t *addrlen);
/**
 * sock:    服务器套接字的文件描述符
 * addr:    保存发起连接请求的客户端地址信息的变量地址值,调用函数后向传递来的地址变量参数填充客户端地址信息
 * addrlen: 第二个参数addr结构体的长度
*/

成功则返回创建的套接字文件描述符,失败则返回-1

TCP客户端

请求连接

#include <sys.socket.h>

int connect(int sock, struct sockaddr *addr, socklen_t addrlen);
/**
 * sock:    服务器套接字的文件描述符
 * addr:    保存目标服务器端地址信息的变量地址值
 * addrlen: 第二个参数servaddr结构体的长度
*/

成功则返回0,失败则返回-1

基于TCP的服务端/客户端函数调用关系

该图总体流程如下:服务器端创建套接字后调用bindlisten函数进入等待状态,客户端通过调用connect函数发起连接请求。需注意的是,客户端只能等到服务器端调用listen函数后才能调用connect函数。同时要清楚,客户端调用connect函数前,服务器端有可能率先调用accept函数。当然,此时服务器端在调用accept函数时进入阻塞(blocking)状态,知道客户端调用connect为止。