int socket(int domain,int type, int protocal)
返回套接字的文件描述符
domain是套接字的通信域,每个域都有不同的地址格式
AF_INET AF_INET6 AF_UNIX AF_UPSEC
AF address family 地址族
type是套接字类型 SOCK_DGRAM 数据报
SOCK_STREAM 字节流
protocol可以指定为0,表示为给定的域和套接字类型选择默认协议
int shutdown(int sockfd,int how)
how:SHUT_RD 关闭读端,SHUT_WR 关闭写端 SHUT_RDWR
getaddrinfo(const char * restrict host,const char *restrict service,const struct addrinfo *restrict hint,struct addrinfo **restrict res);
提供主机名或者服务名,转换成地址
host是主机名,service是服务名
res是一个函数返回的一个addrinfo链表
hint是过滤地址的模板,用于过滤res中的信息
bind(int sockfd,const struct sockaddr *addr,socklen_t len);//服务器端绑定套接字文件描述符和地址
connect(int sockfd,const struct sockaddr *addr,socklen_t len);//客户端将sockfd连接至地址addr
如果connect失败,返回-1,这里可能导致sockfd的状态变成未定义,一次可移植的程序在connect失败后要重新建立套接字
listen(int scokfd,int backlog)//服务器获得请求
accept(int sockfd,struct sockaddr *restrict addr,socklen_t *restrict len)//服务器接收连接请求,并建立连接
sendto(int sockfd,const void *buf,size_t nbytes,int flags,const struct sockaddr *destaddr,socklen_t destlen)
recvfrom(int sockfd,void *restrict buf,size_t len,int flags,struct sockaddr *addr,socklen_t alen);
无连接的发送与接收
sendto:
destaddr是发送目标的地址
接收端调用recvfrom接收,返回时addr中会保存数据来源的地址,那么如果再次返回数据,就可以调用sento将addr做destaddr