Хотя вам нужно будет позвонить bind
, чтобы разрешить другому компьютеру подключаться к этому порту, вам не нужно звонить accept
.
Пока оба процесса вызвали bind
на принимающем порту, а затем, предполагая, что адрес sin
инициализирован для соответствующего пункта назначения, каждый процесс может симметрично соединяться друг с другом, используя al oop, который выглядит следующим образом:
while (connect(s, sin, slen) < 0) {
if (errno == ECONNREFUSED) continue;
perror("connect");
_exit(0);
}
Это случай "одновременного открытия" на диаграмме конечного автомата TCP. Каждая сторона отправляет SYN одновременно, поэтому каждая сторона отвечает SYN / ACK. После того, как каждая сторона отправляет ACK для завершения трехстороннего рукопожатия, обе стороны переходят в состояние ESTABLISHED.
Try It Online не поддерживает потоки или доступ к обратной петле, но позволяет мне удобно представить полный пример кодирования.