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
sockaddr_in– IPv4 socket address.sockaddr_in6– IPv6 socket address.addrinfo– Address info for getaddrinfo.IP_ADAPTER_INFO– Adapter details.
Enumerations
AF_INET,AF_INET6– Address families.SOCK_STREAM,SOCK_DGRAM– Socket types.IPPROTO_TCP,IPPROTO_UDP– Protocols.