TCP/IP Services API Reference

The TCP/IP Services API provides a set of functions for network communication, address resolution, and socket management on Windows platforms. Below you will find the most commonly used functions, structures, and enumerations.

Functions

Socket Functions

  • socket() – Creates a socket.
  • bind() – Binds a socket to an address.
  • listen() – Listens for connections.
  • accept() – Accepts a connection.
  • connect() – Initiates a connection.
  • send(), recv() – Data transfer.
// Example: simple TCP client
#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib")
int main() {
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,2), &wsa);
    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    struct sockaddr_in server = {0};
    server.sin_family = AF_INET;
    server.sin_port = htons(80);
    server.sin_addr.s_addr = inet_addr("93.184.216.34"); // example.com
    connect(s, (SOCKADDR*)&server, sizeof(server));
    const char *msg = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
    send(s, msg, strlen(msg), 0);
    char buf[1024];
    int ret = recv(s, buf, sizeof(buf)-1, 0);
    buf[ret] = 0;
    printf("%s", buf);
    closesocket(s);
    WSACleanup();
    return 0;
}
        

DNS Functions

  • getaddrinfo() – Resolves host names to IP addresses.
  • getnameinfo() – Resolves IP addresses to host names.
  • DnsQuery_A() – Performs DNS queries.
// Resolve hostname
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")
int main() {
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,2), &wsa);
    struct addrinfo hints = {0}, *result;
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    getaddrinfo("example.com", NULL, &hints, &result);
    char ip[INET6_ADDRSTRLEN];
    for (struct addrinfo *ptr = result; ptr; ptr = ptr->ai_next) {
        void *addr;
        if (ptr->ai_family == AF_INET) {
            struct sockaddr_in *ipv4 = (struct sockaddr_in*)ptr->ai_addr;
            addr = &(ipv4->sin_addr);
        } else {
            struct sockaddr_in6 *ipv6 = (struct sockaddr_in6*)ptr->ai_addr;
            addr = &(ipv6->sin6_addr);
        }
        inet_ntop(ptr->ai_family, addr, ip, sizeof ip);
        printf("IP: %s\n", ip);
    }
    freeaddrinfo(result);
    WSACleanup();
    return 0;
}
        

IP Helper API

  • GetAdaptersInfo() – Retrieves network adapter information.
  • GetIpForwardTable() – Retrieves IP routing table.
  • GetNetworkParams() – Retrieves network parameters.
// List adapters
#include <iphlpapi.h>
#pragma comment(lib, "Iphlpapi.lib")
int main() {
    IP_ADAPTER_INFO info[16];
    DWORD buflen = sizeof(info);
    DWORD ret = GetAdaptersInfo(info, &buflen);
    if (ret == NO_ERROR) {
        PIP_ADAPTER_INFO p = info;
        while (p) {
            printf("Adapter: %s\n", p->Description);
            printf("IP: %s\n", p->IpAddressList.IpAddress.String);
            p = p->Next;
        }
    }
    return 0;
}
        

Structures

Enumerations