Unix Sockets 简明教程

Unix Socket - Summary

以下是与套接字编程相关的所有函数的列表。

Port and Service Functions

Unix 提供下列函数用于从 /etc/services 文件中获取服务名称。

  1. struct servent *getservbyname(char *name, char *proto) - 此调用使用服务名称和协议名称,并返回该服务的对应端口号。

  2. struct servent *getservbyport(int port, char *proto) - 此调用使用端口号和协议名称,并返回对应服务名称。

Byte Ordering Functions

  1. unsigned short htons (unsigned short hostshort) - 此函数将 16 位(2 字节)量从主机字节顺序转换为网络字节顺序。

  2. unsigned long htonl (unsigned long hostlong) - 此函数将 32 位(4 字节)数量从主机字节顺序转换为网络字节顺序。

  3. unsigned short ntohs (unsigned short netshort) - 此函数将 16 位(2 字节)数量从网络字节顺序转换为主机字节顺序。

  4. unsigned long ntohl (unsigned long netlong) - 此函数将 32 位数量从网络字节顺序转换为主机字节顺序。

IP Address Functions

  1. int inet_aton (const char *strptr, struct in_addr *addrptr) - 此函数调用将互联网标准点符号表示形式中的指定字符串转换为网络地址,并将地址存储在指定结构中。转换后的地址将采用网络字节顺序(字节从左到右排序)。如果字符串有效,则它返回 1,如果出错,则返回 0。

  2. in_addr_t inet_addr (const char *strptr) - 此函数调用将互联网标准点符号表示形式中的指定字符串转换为适合用作互联网地址的整数值。转换后的地址将采用网络字节顺序(字节从左到右排序)。它返回一个 32 位二进制网络字节顺序 IPv4 地址,如果出错,则返回 INADDR_NONE。

  3. char *inet_ntoa (struct in_addr inaddr) - 此函数调用将指定的互联网主机地址转换为互联网标准点符号表示形式中的字符串。

Socket Core Functions

  1. int socket (int family, int type, int protocol) - 此调用返回一个套接字描述符,你可以在稍后的系统调用中使用它,或者在出错时它会给你 -1。

  2. int connect (int sockfd, struct sockaddr *serv_addr, int addrlen) - connect 函数由 TCP 客户端用于建立与 TCP 服务器的连接。如果此调用成功连接到服务器,则它返回 0,否则它返回 -1。

  3. int bind(int sockfd, struct sockaddr *my_addr,int addrlen) - bind 函数向套接字分配本地协议地址。如果此调用成功绑定到地址,则它返回 0,否则它返回 -1。

  4. int listen(int sockfd, int backlog) - listen 函数仅由 TCP 服务器调用,以侦听客户端请求。此调用成功时返回 0,否则它返回 -1。

  5. int accept (int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen) - accept 函数由 TCP 服务器调用,以接受客户端请求并建立实际连接。此调用成功时返回一个非负描述符,否则它返回 -1。

  6. int send(int sockfd, const void *msg, int len, int flags) - send 函数用于通过流套接字或已连接的数据报套接字发送数据。此调用返回已发送出的字节数,否则它返回 -1。

  7. int recv (int sockfd, void *buf, int len, unsigned int flags) - recv 函数用于通过流套接字或已连接的数据报套接字接收数据。此调用返回已读入缓冲区的字节数,否则它返回 -1。

  8. int sendto (int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen) - sendto 函数用于通过未连接的数据报套接字发送数据。此调用返回已发送出的字节数,否则它返回 -1。

  9. int recvfrom (int sockfd, void *buf, int len, unsigned int flags struct sockaddr *from, int *fromlen) - recvfrom 函数用于从未连接的数据报套接字接收数据。此调用返回已读入缓冲区的字节数,否则它返回 -1。

  10. int close (int sockfd) - close 函数用于关闭客户端和服务器之间的通信。此调用成功时返回 0,否则它返回 -1。

  11. int shutdown (int sockfd, int how) - shutdown 函数用于优雅地关闭客户端和服务器之间的通信。与 close 函数相比,此函数提供了更多控制。此调用成功时返回 0,否则返回 -1。

  12. int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout) - 此函数用于读写多个套接字。

Socket Helper Functions

  1. int write (int fildes, const void *buf, int nbyte) - write 函数尝试将 buf 指向的缓冲区中的 nbyte 字节写入与打开的文件描述符 fildes 关联的文件。如果成功完成,write() 将返回实际写入与 fildes 关联的文件的字节数。此数量永远不会大于 nbyte。否则,将返回 -1。

  2. int read (int fildes, const void *buf, int nbyte) − read 函数尝试从与开放的文件描述符关联的文件 fildes,读取 nbyte 字节到 buf 指向的缓冲器内。在成功完成时,write() 返回实际写入到与 fildes 关联的文件内的字节数。此数字永远不会大于 nbyte。否则,将返回 -1。

  3. int fork (void) − fork 函数创建一个新进程。新进程称为子进程,将成为调用进程(父进程)的确切副本。

  4. void bzero (void *s, int nbyte) − bzero 函数放置 nbyte 空值到字符串 s 中。此函数将用来设置带空值的全部套接字结构。

  5. int bcmp (const void *s1, const void *s2, int nbyte) − bcmp 函数比较字节字符串 s1 和字节字符串 s2。认为这两个字符串都是 nbyte 字节长。

  6. void bcopy (const void *s1, void *s2, int nbyte) − bcopy 函数从字符串 s1 复制 nbyte 字节到字符串 s2 中。重叠字符串正确地被处理。

  7. void *memset(void *s, int c, int nbyte) − memset 函数也被用来设置结构变量比如 bzero。