Skip to content

Instantly share code, notes, and snippets.

@thomasjm
Last active December 9, 2025 23:56
Show Gist options
  • Select an option

  • Save thomasjm/23829fa60e5f01e7080d786b7e1bf57a to your computer and use it in GitHub Desktop.

Select an option

Save thomasjm/23829fa60e5f01e7080d786b7e1bf57a to your computer and use it in GitHub Desktop.
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h>
int main(int argc, char** argv) {
struct addrinfo hints = {0}, *res;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
char* host = argv[1];
char* port = argv[2];
printf("host: %s\n", host);
printf("port: %s\n", port);
int ret = getaddrinfo(host, port, &hints, &res);
if (ret != 0) {
printf("getaddrinfo failed: %s\n", gai_strerror(ret));
return 1;
}
// Count the number of address infos
int count = 0;
for (struct addrinfo *p = res; p != NULL; p = p->ai_next) {
count++;
}
printf("Number of addr infos received: %d\n\n", count);
// Print each address info
int i = 0;
for (struct addrinfo *p = res; p != NULL; p = p->ai_next) {
printf("Address info #%d:\n", i++);
printf(" Family: %d", p->ai_family);
if (p->ai_family == AF_INET) printf(" (AF_INET)");
else if (p->ai_family == AF_INET6) printf(" (AF_INET6)");
printf("\n");
printf(" Socktype: %d", p->ai_socktype);
if (p->ai_socktype == SOCK_STREAM) printf(" (SOCK_STREAM)");
else if (p->ai_socktype == SOCK_DGRAM) printf(" (SOCK_DGRAM)");
printf("\n");
printf(" Protocol: %d\n", p->ai_protocol);
printf(" Addr len: %d\n", p->ai_addrlen);
// Print IP address
void *addr;
char ipstr[INET6_ADDRSTRLEN];
if (p->ai_family == AF_INET) {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
addr = &(ipv4->sin_addr);
inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
printf(" IP Address: %s\n", ipstr);
} else if (p->ai_family == AF_INET6) {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
addr = &(ipv6->sin6_addr);
inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
printf(" IP Address: %s\n", ipstr);
}
printf("\n");
}
int sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (sock < 0) {
printf("socket() failed: %s\n", strerror(errno));
freeaddrinfo(res);
return 1;
}
printf("Socket created: %d\n", sock);
ret = connect(sock, res->ai_addr, res->ai_addrlen);
if (ret < 0) {
printf("connect() failed: %s\n", strerror(errno));
close(sock);
freeaddrinfo(res);
return 1;
}
printf("Connected successfully!\n");
close(sock);
freeaddrinfo(res);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment