Вы можете использовать getsockname
для получения локального IP-адреса сокета.
int getsockname(int socket, struct sockaddr *restrict address,
socklen_t *restrict address_len);
Вот пример:
struct sockaddr_in addr;
socklen_t len = sizeof(addr);
memset(&addr, 0, sizeof(addr));
getsockname(s, &addr, &len);