2012-01-10 20 views
0

當我接受ipv6中的sockaddr_storage時,無法獲取端口號。 這裏是我的V4代碼:當接受sockaddr_storage時不能獲取端口 - ipv6

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

我試圖做V6同樣的事情,但struct 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

對於IPv6,你需要轉換爲sockaddr_in6的,然後成員被命名爲sin6_port而非sin_port。

相關問題