Your struct sockaddr too small to accept a socket address. Use either a structure of the appropriate size, such as struct sockaddr_in , or better yet, use struct sockaddr_storage , which is guaranteed to be large enough to contain the address. Using sockaddr_storage also allows you to easily support both IPv4 and IPv6 with minimal settings.
Edited Code:
struct sockaddr_storage sa; int sa_len; sa_len = sizeof(sa); if (getsockname(socketfd, (struct sockaddr *)&sa, &sa_len) != SOCKET_ERROR)
source share