Linux网络编程常用函数
1.1 普通socket编程常用函数
-
socket函数:
#include <sys/socket.h> int socket(int domain, int type, int protocol); 创建一个 套接字 domain:AF_INET、AF_INET6、AF_UNIX type:SOCK_STREAM、SOCK_DGRAM protocol: 0 返回值: 成功: 新套接字所对应文件描述符 失败: -1 errno
-
bind函数:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 给socket绑定一个 地址结构 (IP+port) sockfd: socket 函数返回值 struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(8888); addr.sin_addr.s_addr = htonl(INADDR_ANY); addr: 传入参数(struct sockaddr *)&addr addrlen: sizeof(addr) 地址结构的大小。 返回值: 成功:0 失败:-1 errno
-
listen函数:
int listen(int sockfd, int backlog); 设置同时与服务器建立连接的上限数。(同时进行3次握手的客户端数量) sockfd: socket 函数返回值 backlog:上限数值。最大值 128. 返回值: 成功:0 失败:-1 errno
-
accept函数:
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 阻塞等待客户端建立连接,成功的话,返回一个与客户端成功连接的socket文件描述符。 sockfd: socket 函数返回值 addr:传出参数。成功与服务器建立连接的那个客户端的地址结构(IP+port) socklen_t clit_addr_len = sizeof(addr); addrlen:传入传出。 &clit_addr_len 入:addr的大小。 出:客户端addr实际大小。 返回值: 成功:能与客户端进行数据通信的 socket 对应的文件描述。 失败: -1 , errno
-
connect函数:
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 使用现有的 socket 与服务器建立连接 sockfd: socket 函数返回值 struct sockaddr_in srv_addr; // 服务器地址结构 srv_addr.sin_family = AF_INET; srv_addr.sin_port = 9527 跟服务器bind时设定的 port 完全一致。 inet_pton(AF_INET, "服务器的IP地址",&srv_adrr.sin_addr.s_addr); addr:传入参数。服务器的地址结构 addrlen:服务器的地址结构的大小 返回值: 成功:0 失败:-1 errno
-
read函数:
ssize_t read(int fildes, void *buf, size_t nbyte); fildes:要被取出的文件描述符 buf:对象缓冲区 nbyte:对象缓冲区大小 返回值: > 0: 实际读到的字节数 = 0: 读完数据(读文件, 管道, socket