$ make v4v6
cc v4v6.c -o v4v6
$ ./v4v6
tcp 0 0 127.0.0.1:14451 127.0.0.1:5555 ESTABLISHED
tcp6 0 0 :::5555 :::* LISTEN
tcp6 0 0 127.0.0.1:5555 127.0.0.1:14451 ESTABLISHED
Last active
October 18, 2023 19:53
-
-
Save yobennett/c0fa2d7d4c90e618976515982a75375d to your computer and use it in GitHub Desktop.
AF_INET6 with active connection AF_INET4 socket
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
v4v6: | |
cc v4v6.c -o v4v6 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <sys/socket.h> | |
#include <netinet/in.h> | |
#define TEST_PORT 5555 | |
#define xstr(s) str(s) | |
#define str(x) #x | |
int main (int argc, char **argv) | |
{ | |
int v6server; | |
int v4client; | |
int rc; | |
struct sockaddr_in6 s6addr = { | |
.sin6_family = AF_INET6, | |
.sin6_flowinfo = 0, | |
.sin6_port = htons(TEST_PORT), | |
.sin6_addr = in6addr_any | |
}; | |
struct sockaddr_in c4addr = { | |
.sin_family = AF_INET, | |
.sin_port = htons(TEST_PORT), | |
.sin_addr = inet_addr("127.0.0.1") | |
}; | |
// Open an IPv6 listener | |
v6server = socket(AF_INET6, SOCK_STREAM, 0); | |
if (v6server < 0) perror("socket()"); | |
rc = bind(v6server, (struct sockaddr *)&s6addr, sizeof(s6addr)); | |
if (rc != 0) perror("bind()"); | |
rc = listen(v6server, 0); | |
if (rc != 0) perror("listen()"); | |
// Connect to the listener with an IPv4 socket | |
v4client = socket(AF_INET, SOCK_STREAM, 0); | |
if (v4client < 0) perror("socket()"); | |
rc = connect(v4client, (struct sockaddr *)&c4addr, sizeof(c4addr)); | |
if (rc != 0) perror("connect()"); | |
// inspect open sockets | |
system("netstat -tan | grep " xstr(TEST_PORT)); | |
close(v4client); | |
close(v6server); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment