接受sockaddr_storage - ipv6时无法获得端口

时间:2012-01-10 09:11:47

标签: port ipv6 ipv4

当我接受ipv6中的sockaddr_storage时,我无法获得端口号。 这是我的v4代码:

peersockfd = accept(xtcpsock_fd,(struct sockaddr*)&addr,(socklen_t*)&len);
.....
sprintf(szSocket,"%s:%d",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port));

我正在尝试为v6做同样的事情,但sockaddr_storage没有任何成员作为端口。我怎样才能做到这一点?

peersockfd = accept(xtcpsock6_fd, (struct sockaddr *)&their_addr, &sin_size);
.....           
inet_ntop(their_addr.ss_family, &((struct sockaddr_in6 *)&their_addr)->sin6_addr,s,sizeof s);
sprintf(szSocket,"%s:%d",s,***ntohs(their_addr.sin_port));

1 个答案:

答案 0 :(得分:1)

对于IPv6,您需要转换为 sockaddr_in6 ,然后该成员名为 sin6_port 而不是sin_port。