【问题标题】:Segmentation Fault when converting IP address to text form将 IP 地址转换为文本形式时出现分段错误
【发布时间】:2014-04-07 21:11:01
【问题描述】:

我正在尝试将连接到我的服务器的任何客户端的 IP 地址转换为如下文本格式:

    struct sockaddr_in *client_addr = NULL;
    socklen_t addrlen = sizeof(struct sockaddr_in);
    char client_ip[INET_ADDRSTRLEN];

    printf("Waiting for incomming connections!\n");
    if ((client.fd = accept(server_fd, (struct sockaddr *) client_addr, &addrlen)) < 0)
    {
        perror("Accept() API failed.");
        continue;
    }

    // Convert Client address from binary to text.
    strcpy(client_ip, inet_ntoa(client_addr->sin_addr));

当我运行之前的代码时,我得到了 Segmentation fault (core dumped)。

我还用以下内容替换了最后一行,但我得到了同样的错误:

    inet_ntop(AF_INET, &(client_addr->sin_addr), client_ip, INET_ADDRSTRLEN);

那么问题出在哪里?

【问题讨论】:

    标签: c linux berkeley-sockets


    【解决方案1】:

    您尚未为client_addr 分配内存。 它可能只是

    struct sockaddr_in client_addr
    

    而不是

     struct sockaddr_in *client_addr = NULL;
    

    【讨论】:

      【解决方案2】:

      看来您必须为 client_addr(使用 malloc)分配空间

      这里有一些关于答案的代码: How to map sockaddr_in C Structure to Java using SWIG

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-23
        • 1970-01-01
        • 2017-12-13
        相关资源
        最近更新 更多