Я пытаюсь найти способ запустить несколько клиентов сокетов параллельно;такой, что как только первый клиент получает действительный ответ - код продолжает работать и останавливает все еще работающие потоки.
Мой вариант использования для клиентского устройства, которое имеет одно серверное устройство, с которым пытается связаться - однакопуть к этому устройству может принимать от 1 до 5 различных путей (в роуминге беспроводная сеть с несколькими шлюзами).
Мой код в настоящее время поддерживает это путем последовательной попытки нескольких IP-адресов, пока он не подключится, но это мучительно медленно, когда ему приходится ждатьпервые 4 соединения потерпят неудачу.Однако я борюсь с pthreads, поскольку мне еще не удалось найти способ отменить другие потоки без катастрофических последствий.
Вот какой-то код псевдо:
//psuedo code
char host[5][100];
strcpy(host[0], "IP0");
strcpy(host[1], "IP1");
strcpy(host[2], "IP2");
strcpy(host[3], "IP3");
strcpy(host[4], "IP4");
spawn5Threads()
{
data = getDataFromTCPSocket(host[myThreadIndex]);
if(data.valid)
{
cancelAllOtherThreads();
}
}
if(data.valid)
{
sendDataToBeProcessed(data);
}
else
{
//fail!
}