【问题标题】:linux system call getpeername c++linux系统调用getpeername c++
【发布时间】:2010-12-15 16:26:02
【问题描述】:

在我的 c++ 应用程序中,我使用 getpeername 系统调用,它在 var sa 中返回 0.0.0.0。 errno没有错误,返回码为0。

代码如下:

int GetSock(int sock)
{
    struct sockaddr_storage ss;
    socklen_t salen = sizeof(ss);
    struct sockaddr *sa;
    struct addrinfo hints, *paddr, *paddrp;

    sa = (struct sockaddr *)&ss;

    if (getpeername(sock, sa, &salen) != 0) {
        error = errno;
        return -1;
    }
}

注意:我在 Eclipse 中使用 GCC 编译此代码。 有什么帮助吗?

谢谢!

【问题讨论】:

  • 你能给我们看一个你的代码示例吗?
  • 您是否尝试过使用 getpeername()?
  • 看起来它正在用于未连接的套接字或服务器套接字上。
  • 告诉我们有关套接字的信息。它处于什么状态?
  • 检查返回的错误信息。您可以使用 strerror 或 perror 函数来获取字符串输出。他们应该给你一个很好的提示,为什么事情会出错。

标签: c++ linux system-calls


【解决方案1】:
        error = errno;
        return -1;
    }
    /* Did you mean to return something right here? */
}

【讨论】:

    【解决方案2】:

    Upon successful completion, 0 shall be returned. Otherwise, -1 shall be returned and errno set to indicate the error.

    编辑:检查 sock 的值是多少。 getpeername 仅提取和存储套接字的对等地址,在本例中为 sock,并将其存储在 sa 中。如果您的套接字未创建或您的套接字未绑定到命名套接字,则 sa 指向的内容未指定,这可能是您的情况。

    【讨论】:

      猜你喜欢
      • 2011-06-06
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 2020-01-04
      • 2016-02-09
      • 2016-05-12
      • 2016-03-02
      • 1970-01-01
      相关资源
      最近更新 更多