Я испытываю замедления при попытке отправить сообщение UDP на несуществующий IP-адрес. Мы читаем список IP / портов из файла конфигурации и ожидаем, что эти комбинации будут существовать. В некоторых ситуациях удаленный компьютер может быть еще не подключен к сети, и IP-адрес не будет существовать в сети. В этом случае я бы предпочел, чтобы мы не пытались отправить данные.
Я ищу предложения о том, как определить, что IP не существует, чтобы пропустить отправку данных. Я не хочу полностью удалять его из списка, потому что есть вероятность, что машина может подключиться к сети, и я хотел бы продолжить отправку данных.
Соответствующий код:
int SendData(const char *data, int size, bool openIfClosed)
{
std::lock_guard<std::mutex> lock(sendMutex);
//if the socket was not already opened, close it after i do my send
bool closeAfterSend = mySocket == INVALID_SOCKET ? true : false;
if (!OpenSocket(openIfClosed))
return 0;
sockaddr_in address;
address.sin_family = AF_INET;
address.sin_port = htons(remotePort);
address.sin_addr.s_addr = remoteIPAddress.GetIPAddressAsULong();
//check if remote address exists prior to send?
int bytesSent = sendto(mySocket, data,
size, 0, (struct sockaddr *)&address, sizeof(address));
if (bytesSent == size)
numMsgsOut++;
else
{
//fail
}if (closeAfterSend && openIfClosed)
{
closesocket(mySocket);
mySocket = INVALID_SOCKET;
}
return bytesSent;
}
Задача ещё не решена.
Других решений пока нет …