以TCP协议为例,UNIX的相关API服务器
int socket(int domain , int type , int protocol);
根据指定的地址族,数据类型,协议来分配一个socket的描述字以及所占用的资源。dom
domain:协议族,常见的有AF_INET、AF_INET六、AF_LOCAL、AF_ROUTE,其中AF_INET表明ipv4地址socket
type:socket类型,常见的socket类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等spa
protocol:协议。常见的协议有IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等blog
返回值:返回一个套接口描述符0 or 1 or 2,若是出错,则返回-1。 接口
int bind(int sockfd , const struct sockaddr * addr , socklen_t addrlen);
把一个地址族中的特定地址赋给socketip
sockfd:socket描述字,便是sock引用资源
addr:要绑定给sockfd的协议地址it
addrlen:协议地址的长度class
一般服务器在启动时要绑定一个众所周知的IP地址和端口,用于提供服务,客户经过它就能够链接到服务器。可是客户端与之不一样,客户端是在connect():时自动分配一个端口。这就是为何客户没有调用bind();的操做而服务器在listen();前须要bind();的操做。
int listen(int sockfd , int backlog);
监听socket
sockfd:要监听的socket描述字
backlog:相应socket能够排队的最大链接个数
int connect(int sockfd , const struct sockaddr *addr , socklen_t addrlen);
链接某个socket
sockfd:某个客户端的描述字
addr:服务器的socket地址
addrlen:socket地址的长度
int accept(int sockfd , const struct sockaddr *addr , socklen_t *addrlen);
TCP服务器监听到用户请求后,调用accept();接收请求
sockfd:服务器的socket描述字
addr:服务器的socket地址
addrlen:服务器socket地址的长度
· 返回值类型:返回的是一个不一样的socket,这个socket保存的是你客户端的socket信息
ssize_t read(int sockfd , void *buf , size_t count);
读取socket内容
sockfd:socket描述字
buf:缓冲区
count:缓冲区的长度
ssize_t write(int sockfd , void *buf , count);
写入socket内容
sockfd:socket描述字
buf:缓冲区
count:缓冲区长度
int close(int sockfd);
标记socket为关闭,使相应socket描述字的引用计数为-1,当引用计数为0时,触发TCP客户端向服务器发送终止链接请求