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

问题描述

我对C完全陌生。 并在套接字上遵循此tutorial。但是,他正在使用close(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;
}

解决方法

没有名为sock的变量。套接字被称为其他名称。

是的,在您的代码中是network_socket。因此,您需要close(network_socket);

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

您需要#include <unistd.h>,在此声明close()。 (如果您查看man close,则会在顶部看到它。)

,

您需要传递套接字文件描述符作为close()的参数。对于您的代码,该值为network_socket。因此,close()需要被称为close(network_socket);

此外,您需要将<unistd.h>标头用于close()函数。