Microsoft Docs

getsockname

Synopsis

int getsockname(
    SOCKET s,
    struct sockaddr *name,
    int *namelen
);

Description

The getsockname function retrieves the local address information associated with a socket. This includes the IP address and port number that the socket is bound to.

Typical usage scenarios:

Parameters

NameDirectionDescription
sInputSocket descriptor returned by socket.
nameOutputPointer to a sockaddr structure that receives the address.
namelenIn/OutOn entry, size of name; on return, actual size of the address.

Return Value

Returns 0 on success. On failure, -1 is returned and WSAGetLastError provides the error code.

Example

#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")

int main() {
    WSADATA wsaData;
    SOCKET listenSock = INVALID_SOCKET;
    struct sockaddr_in serverAddr, localAddr;
    int addrLen = sizeof(localAddr);
    int result;

    WSAStartup(MAKEWORD(2,2), &wsaData);

    listenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (listenSock == INVALID_SOCKET) { printf("socket failed\\n"); return 1; }

    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    serverAddr.sin_port = htons(0);  // ask OS for an available port

    result = bind(listenSock, (SOCKADDR*)&serverAddr, sizeof(serverAddr));
    if (result == SOCKET_ERROR) { printf("bind failed\\n"); return 1; }

    result = getsockname(listenSock, (SOCKADDR*)&localAddr, &addrLen);
    if (result == SOCKET_ERROR) {
        printf("getsockname failed: %d\\n", WSAGetLastError());
    } else {
        char ipStr[INET_ADDRSTRLEN];
        inet_ntop(AF_INET, &localAddr.sin_addr, ipStr, sizeof(ipStr));
        printf("Listening on %s:%d\\n", ipStr, ntohs(localAddr.sin_port));
    }

    closesocket(listenSock);
    WSACleanup();
    return 0;
}

See Also