getpeername () - это функция, которую вы хотите использовать.
Некоторые ошибки, которые я вижу в вашем коде:
1) Вы размещаете addr в куче.Нет необходимости делать это, просто объявите "sockaddr_in addr;"вместо этого в стеке и передайте & addr (вместо addr) в свой вызов getpeername ().
2) addrsize устанавливается в размере указателя (например, 4 или 8), а не в размерефактический sockaddr_in, что означает, что ...
3) getsockname (), вероятно, не работает, но вы этого не знаете, потому что
4) Вы не проверяете возвращаемое значениеgetockname (), чтобы увидеть, была ли ошибка или нет, это означает, что
5) Результаты, которые вы видите, просто показывают вам, какие случайные данные мусора были в (* addr) перед getockname () / getpeername(), потому что вызов не удался, не записав ничего в структуру addr.
6) О, еще одна вещь ... не забудьте обернуть вашу ссылку на addr.sin_addr в вызов ntohl (),и ваша ссылка на addr.sin_port в вызове ntohs (), или вы получите их в формате с прямым порядком байтов при работе на компьютере с прямым порядком байтов (читай: на базе Intel), а это не то, что вам нужно.