Можно организовать такое соединение, создав сокет, привязав его к 127.0.0.1:40006
, затем connect()
к 127.0.0.1:40006
.(Примечание: нет listen()
).Я считаю, что это называется «активно-активное открытие».
Следующая программа демонстрирует это:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
int main()
{
int s;
struct sockaddr_in sa = {
.sin_family = PF_INET,
.sin_port = htons(40006),
.sin_addr.s_addr = htonl(INADDR_LOOPBACK) };
s = socket(PF_INET, SOCK_STREAM, 0);
if (s < 0) {
perror("socket");
return 1;
}
if (bind(s, (struct sockaddr *)&sa, sizeof sa) < 0) {
perror("bind");
return 1;
}
if (connect(s, (struct sockaddr *)&sa, sizeof sa) < 0) {
perror("connect");
return 1;
}
pause();
return 0;
}
Причина, по которой порт не может быть повторно использован, состоит в том, что порт непрослушивание - это исходящий порт.