Моя задача - реализовать игру для двух игроков между двумя компьютерами, подключенными через TCP. Одним из требований является то, что только победителю предоставляется право выбора игры снова или нет. Если сервер выигрывает и решает не играть дальше, клиент должен перезапуститься как сервер и принять новые подключения.
Мой подход:
Если игра LOST (в режиме клиента), закройте sockfd и создайте новую. Затем используйте setsockopt, чтобы разрешить повторное связывание с использованием SO_REUSEADDR, а затем вызвать bind.
int yes = 1;
if ( setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 )
{
perror("setsockopt");
}
if ( bind(sockfd, (struct sockaddr*)&svr, sizeof(svr) ) == -1 )
{
perror("server: bind");
}
Но все равно я получаю ту же ошибку "Адрес уже используется". Я пробовал спать в течение 150 секунд, прежде чем воссоздать сокет, и этот метод работает.
ПРИМЕЧАНИЕ: я тестирую это на том же ПК. Он может работать на двух связанных компьютерах, но необходимо, чтобы он работал на одном компьютере. Пожалуйста, помогите.