模型
TCP客户/服务器模型
回射客户/服务器
主要函数:socket,bind,listen,accept,connect

关键函数
socket函数
头文件:<sys/socket.h>
功能:创建一个套接字用于通信
原型:int socket(int domain,int type,int protocol)
参数:
domain: 指定通信协议簇(protocol family)
type: 指定socket类型(流式SOCK_STREAM,数据报式SOCK_DGRAM,原始套接字SOCK_RAW)
protocol:协议类型
返回值: 成功返回非负整数,失败返回-1
bind函数
头文件:<sys/socket.h>
功能:绑定要给本地地址到套接字
原型:int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen);
参数:
sockfd:socket函数返回的套接字
addr:要绑定的地址
addrlen:地址长度
返回值:成功返回0,失败返回-1
listen函数
头文件<sys/socket.h>
功能:将套接字用于监听进入的连接
原型:int listen(int sockfd,int backlog)
参数:
sockfd: socket函数返回的套接字
backlog:规定内核为此套接字排队的最大连接个数
返回值:成功返回0,失败返回-1
调用函数后,套接字变成被动套接字
被动套接字 accept 接受连接
主动套接字 connect 发起连接
内核维护两个队列
1.已由客户发出并到达服务器,服务器正在等待完成相应的TCP三路握手过程
2.已完成连接的队列
两队列之和不超过backlog
accept函数
头文件:<sys/socket.h>
功能:从已完成连接队列返回第一个连接,如果已完成连接队列为空,则阻塞
原型:int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen)
参数:
sockfd:服务器套接字
addr:将返回对等方的套接字地址
addrlen:返回对等方的套接字地址长度
返回值:成功返回非负整数,失败返回-1