编写TCP服务器调用close(socket_fd)出现隐式声明错误求助
TCP服务器close函数隐式声明错误解决方法
编写TCP服务器时,调用close(sock_fd)关闭套接字触发了隐式声明警告,移除该调用后代码可正常运行。以下是服务器代码及编译错误信息:
服务器代码(tcpserver.c)
// tcpserver.c // including the header files #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <netdb.h> #include <arpa/inet.h> //main function int main() { char server_message[100] = "You have reached the server!"; // creating the server socket int sock_fd; sock_fd = socket( AF_INET, SOCK_STREAM, 0 ); // defining the socket address struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(9002); server_addr.sin_addr.s_addr = INADDR_ANY; // bind the socket bind(sock_fd, (struct sockaddr *) &server_addr, sizeof(server_addr)); //listen for connections listen(sock_fd, 5); //accept the connection int client_socket_fd; client_socket_fd = accept(sock_fd, NULL, NULL); //sending the server message send(client_socket_fd,server_message, strlen(server_message),0); //closing the socket close(sock_fd); return 0; }
编译错误信息
make tcpserver cc tcpserver.c -o tcpserver tcpserver.c: In function ‘main’: tcpserver.c:40:9: warning: implicit declaration of function ‘close’; did you mean ‘pclose’? [-Wimplicit-function-declaration] 40 | close(sock_fd); | ^~~~~ | pclose
问题原因与解决方法
- 原因:
close()函数的声明定义在<unistd.h>头文件中,当前代码未包含该头文件,编译器无法找到函数声明,因此触发隐式声明警告。 - 解决步骤:
- 在代码的头文件包含区域添加
#include <unistd.h>; - 除了关闭监听套接字
sock_fd,还应该关闭客户端连接套接字client_socket_fd,避免资源泄漏,即在close(sock_fd)前添加close(client_socket_fd);。
- 在代码的头文件包含区域添加
修改后的头文件部分示例:
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <netdb.h> #include <arpa/inet.h> #include <unistd.h> // 添加这个头文件
内容的提问来源于stack exchange,提问作者Daddydoofus
相关产品推荐
相关产品推荐

