Linux基础命令accept的用法
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;
}
相关文章