2010-12-15 152 views
0

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

这里是代码:

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。 有帮助吗?

谢谢!

+0

你能告诉我们一个你的代码的例子吗? – birryree 2010-12-15 16:29:21

+0

你尝试过使用getpeername()吗? – yasouser 2010-12-15 16:35:15

+0

看起来它正在用于未连接的套接字或者是服务器套接字。 – 2010-12-15 16:45:07

回答

0

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

编辑:检查什么是袜子的价值。 getpeername只提取并存储套接字的对等地址,在本例中为sock,并将其存储在sa中。如果你的套接字没有被创建,或者你的套接字没有被绑定到一个已命名的套接字,那么没有指定什么,这可能是你的情况。

+0

没有错误。它只是返回在0.0.0.0 – gln 2010-12-16 05:11:37

+0

@gln - 看我的更新 – DumbCoder 2010-12-16 12:02:00

+0

我该如何检查它? – gln 2011-01-09 10:08:58

1
 error = errno; 
     return -1; 
    } 
    /* Did you mean to return something right here? */ 
} 
+0

没有错误。它只是在0.0.0.0中返回 – gln 2010-12-16 05:11:00