Не могу получить порт, когда принять с sockaddr_storage - ipv6 - PullRequest
0 голосов
/ 10 января 2012

Я не могу получить номер порта, когда я принимаю с sockaddr_storage в ipv6.Вот мой код 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 Ответ

1 голос
/ 10 января 2012

Для IPv6 вам необходимо привести к sockaddr_in6 , а затем члену будет присвоено имя sin6_port вместо sin_port.

...