int socket (int family, int type, int protocol); | family:通信域;type:套接字类型; protocol:一般为0 | 返回非负(sockfd):成功 -1:出错 |
int bind(int sockfd, const struct sockaddr *addr, socklen_len len); | len:地址结构(第二个参数)的长度 | 返回0:成功 -1:出错并置errno |
int listen(int sockfd, int backlog); | backlog:内核为此套接字排队的最大连接个数,但与系统所允许的最大连接数没有关系 | 返回0:成功 -1:出错并置errno |
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); | 激发TCP的三次握手过程,仅在成功或出错时返回 | 返回0:成功 -1:出错并置errno |
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen); | 从已完成连接队列头返回下一个已完成连接;如果该队列空,则进程进入睡眠状态 | 返回非负描述字(connfd):成功 -1:出错 |
int close(int sockfd); | 将套接字标上“已关闭”标记,并立即返回到进程,套接字不再为该进程所用 | 返回0:成功 -1:出错 |
int write(int fd, char *buf, int len); int read(int fd, char *buf, int len); | buf:缓冲区 | 返回>0:写(读)字节大小 -1:出错 |
ssize_t send (int fd, const void *msg, size_t len, int flags); | flags:传输控制标志 0:常规操作,如同write()函数; MSG_OOB:发送带外数据; MSG_DONTROUTE:忽略底层协议的路由设置,只能将数据发送给与发送机处在同一个网络中的机器上 | 返回非0:发送成功的数据长度 -1:出错 |
ssize_t recv(int fd, void *buf ,size_t len, int flags); | flags:传输控制标志 0:常规操作,如同read()函数; MSG_PEEK:只查看不读出数据; MSG_OOB:只读带外数据; MSG_WAITALL:等待直到所有的数据可用,仅SOCK_STREAM。此时len表示的是等待数据的长度 | 返回>0:接收成功的数据长度 0:对方已关闭 -1:出错 |
AF_INET | IPv4协议 |
AF_INET6 | IPv6协议 |
AF_UNIX | unix域协议 |
SOCK_STREAM | 字节流套接口 |
SOCK_DGRAM | 数据报套接口 |
SOCK_RAW | 原始套接口 |