如何在 C 中关闭套接字(Linux 上的 GCC)

Rus*_*s.K 0 c sockets

我对 C 完全陌生。并且正在遵循有关套接字的yt教程。然而他正在使用该close(sock)功能。有2个问题:

  • 没有名为 的变量sock。套接字有别的名称。
  • 我找不到关闭功能。编译器说该函数不存在

你能解释一下吗?这个问题可能看起来有点太愚蠢了。这是客户端代码:

#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <sys/socket.h>

#include <netinet/in.h>

int main()
{
    // Create a socket
    int network_socket; 
    network_socket = socket(AF_INET, SOCK_STREAM, 0);

    // Address for the socket
    struct  sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(9002);
    server_address.sin_addr.s_addr = INADDR_ANY;

    int connection = connect(network_socket, (struct sockaddr *) &server_address, sizeof(server_address));
    printf("%d\n", connection);

    char response[256];
    recv(network_socket, &response, sizeof(response), 0);

    printf("%s\n", response);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Rup*_*Rup 8

没有名为 sock 的变量。套接字有别的名称。

是的,它是您代码中的network_socket。所以你要close(network_socket);

我找不到关闭功能。编译器说该函数不存在

您需要#include <unistd.h>,这是声明 close() 的地方。(如果你看一下,man close你会在顶部看到这个。)

  • @RushiSrinivas.K 显然,另一个标头必须隐式包含`unistd.h`,这就是为什么本教程的代码不需要这样做。不要依赖于此。如果您需要使用特定标头中的某些内容,则只需自己包含该标头即可。如果它已经包含在内,那就可以了(前提是标头使用了正确的包含防护,99% 的情况都是如此) (2认同)