在我的Linux C++应用程序中,我使用getpeername和getsockname。当在操作系统上启用IPv6时,getpeername和getsockname只返回端口!C++ Linux getpeername和getsockname仅返回端口
代码:仅sa_data [0]和sa_data [1]这意味着端口sa_data的systemcalls后
int GetSockAndPeer(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)
{
return -1;
}
if (getsockname(sock, sa, &salen) != 0)
{
return -1;
}
}
SA变量保持。所有其他字节都是0;
任何帮助?
与大多数问题相关,__RFC2553:IPv6__基本套接字接口扩展(http://www.faqs.org/rfcs/rfc2553.html)将是一个很好的解读。否则,请使用支持IPv4/IPv6的boost.ASIO(http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio.html)库。 – 2011-01-09 15:04:04
该代码不应该如果启用了足够的编译器警告/错误,则进行编译:如果未采用条件,则它不会返回任何值。 至于帮助我们帮助你,对你想要做什么的一些解释是有用的。 – 2011-01-09 15:15:15