在C语言中,accept()函数和shutdown()函数用于网络编程中的套接字操作。
- accept()函数:
accept()函数用于接受客户端的连接请求,创建一个新的套接字来与客户端进行通信。函数原型如下:
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数说明:
-
sockfd:服务器套接字描述符,用于接受客户端的连接请求。
-
addr:指向一个struct sockaddr结构体的指针,用于存储客户端的地址信息。
-
addrlen:指向一个socklen_t类型的变量,用于存储客户端地址结构体的长度。
返回值:
-
成功时返回一个新的套接字描述符,用于与客户端进行通信。
-
失败时返回-1。
使用示例:
int server_fd, client_fd; struct sockaddr_in server_addr, client_addr; socklen_t client_len; // 创建服务器套接字 server_fd = socket(AF_INET, SOCK_STREAM, 0); // 绑定服务器地址 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = INADDR_ANY; bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)); // 监听客户端连接请求 listen(server_fd, BACKLOG); // 接受客户端连接请求 client_len = sizeof(client_addr); client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_len); // 使用client_fd与客户端进行通信
- shutdown()函数:
shutdown()函数用于关闭套接字的一个或者两个方向的数据传输。函数原型如下:
int shutdown(int sockfd, int how);
参数说明:
-
sockfd:套接字描述符。
-
how:指定关闭的方式,它可以取以下两个值:
-
SHUT_RD:关闭套接字的读取功能(禁止读取数据)。
-
SHUT_WR:关闭套接字的写入功能(禁止发送数据)。
返回值:
-
成功时返回0。
-
失败时返回-1。
使用示例:
// 关闭套接字的读取功能 shutdown(sockfd, SHUT_RD); // 关闭套接字的写入功能 shutdown(sockfd, SHUT_WR); // 关闭套接字的读取和写入功能 shutdown(sockfd, SHUT_RDWR);
注意:使用shutdown()函数关闭套接字并不会关闭该套接字的文件描述符,需要使用close()函数来关闭套接字的文件描述符。