getpeername

时间:2015-10-08 13:39:25

标签: c sockets network-programming

我正在用C学习一个简单的TCP服务器,并且存在以下问题。我的代码如下所示:

struct sockaddr_in servaddr;
socklen_t address_len;
int connfd, sockerr;
...

address_len = sizeof(servaddr);
if (sockerr = getpeername(connfd, (struct sockaddr *) &servaddr, &address_len) == -1) {
   perror("peername error");
   exit(1);
}
else {
    printf("IP: %s\n", inet_ntoa(servaddr.sin_addr));
    printf("Port: %d\n", (int) ntohs(servaddr.sin_port));
  }

但是当我执行代码时,我遇到了分段错误。但是,如果我交换printf行,则正确显示端口,因此问题出在sin_addr字段。换句话说,问题出在:

printf("IP: %s\n", inet_ntoa(servaddr.sin_addr));

有关如何修复它的任何想法?

1 个答案:

答案 0 :(得分:0)

好吧,我已经重写了我的代码以更好地适应这个网站中的示例:http://www.retran.com/beej/getpeernameman.html并且它已经成功了。

尽管如此,我仍然不知道以前出了什么问题。