Linux基础命令accept的用法

2023-04-16 00:13:00 命令 基础 用法
Linux accept 命令是一个系统调用,它接受新的连接请求,并将其分配给一个新的套接字。它接受一个已经在监听状态的套接字,并返回一个新的套接字,用于与客户端的通信。 accept() 函数原型: int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); accept() 函数有三个参数: sockfd:指定要监听的socket描述符; addr:用于存放客户端的地址信息; addrlen:存放地址信息的缓冲区的长度。 accept() 函数的返回值: 当accept() 执行成功时,返回一个新的套接字描述符,用于与客户端的通信;当accept() 执行失败时,返回-1,并设置errno 以指示错误原因。 accept() 函数的使用: 在使用accept() 函数之前,必须先创建一个socket,并使用bind() 函数将其绑定到一个本地地址。然后使用listen() 函数将socket 设置为监听模式,表示可以接受客户端的连接请求。 当有客户端发起连接请求时,服务器端就可以使用accept() 函数接受请求,并创建一个新的套接字,用于与客户端的通信。 accept() 函数的使用示例: 以下示例展示了如何使用accept() 函数接受客户端的连接请求: #include #include #include #include #include #include int main(int argc, char *argv[]) { int sockfd, new_sockfd; struct sockaddr_in server_addr, client_addr; socklen_t sin_size; int port = 8080; // 创建套接字 if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); return 1; } // 设置服务器地址 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); server_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(server_addr.sin_zero), 8); // 绑定地址 if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { perror("bind"); return 1; } // 监听 if (listen(sockfd, 5) == -1) { perror("listen"); return 1; } printf("Listening on port %d\n", port); // 接受客户端连接 while(1) { sin_size = sizeof(struct sockaddr_in); if ((new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size)) == -1) { perror("accept"); return 1; } printf("Received a connection from %s\n", inet_ntoa(client_addr.sin_addr)); close(new_sockfd); } return 0; }

相关文章