Я работаю с кодом, который использует XML по протоколу TCP. Эта реализация имеет тайм-аут 10 секунд для каждого send()
и recv()
, чтобы дождаться целых данных, используя setsockopt()
. После некоторого времени работы я обнаружил, что иногда recv()
не ждет тайм-аута и возвращает значение -1. Пока я пытался решить проблему, я добавил код sleep(2)
, и я узнал, что sleep()
был прерван каждый раз, когда я столкнулся с ошибкой recv. Исходя из этого, я думаю, что корень проблемы - это сигнал, но я не смог найти, какой сигнал.C++: Может ли setockopt() игнорировать сигнал?
Мой вопрос следующий: Могло ли прерывание recv() прерываться сигналом? Примечание: ожидание recv()
«s устанавливается на setsockopt()
EDIT: Вот решение (Спасибо за помощь):
while (buf > 0)
{
rsize = recv(socket, bufsize, buf, 0)
if (rsize == -1)
{
if (errno == EINTR)
continue;
break;
}
break;
}
Вы используете Linux? – jxh
Что вы на самом деле имеете в виду _ignored by signal_ ?? Сигналы обрабатываются асинхронно и могут обрабатываться независимо от кода ожидания в разных потоках. –
Ваш _signal aware_ 'recv()' - вопиющий бессмысленный код BTW. –