При подключении к серверу вам потребуется протокол квитирования, чтобы вы могли проверить, можно ли начинать отправку / получение данных, в противном случае вы можете подключиться к одной из конечных точек и начать отправку данных только немедленно. чтобы другой конец разорвал соединение.
Чтобы убедиться, что к серверу подключено только одно соединение, вам просто нужно что-то вроде этого псевдокода:
remote_server = accept_connection()
lock mutex;
if(already_connected(remote_server)) {
drop_connection(remote_server)
}
unlock mutex;
Если ваш сервер не многопоточный, вам не нужны блокировки для защиты, когда вы проверяете, подключены ли вы уже - поскольку не будет никаких проблем "в то же время".
Вам также потребуется механизм повторных попыток подключения к серверу на основе небольшого случайного льготного периода в случае, если удаленный сервер закрыл только что установленное соединение.
Если соединение было закрыто, подождите немного, проверьте, подключено ли уже (возможно, другой конец установил вам соединение в это время) и попробуйте подключиться снова. Это сделано для того, чтобы избежать ситуации, когда оба конца устанавливают соединение одновременно, но другой конец закрывает его из-за вышеуказанной логики.