LINUX.ORG.RU

Fsync для сокета


0

0

В двух словах: пишу программу регистрации данных по сети для встроенной системы.

Есть критические места, в которых система может упасть (машина уходит в ребут со всеми вытекающими).
Соответственно, в таких местах (перед ними) необходимо гарантированно отправить данные.

Есть ли средства (протокол TCP), позволяющие дождаться ответа о приеме данных от второй стороны? Что-то вроде sync'а, либо write'а, блокирующего поток "до победного"?

★★

> Есть ли средства (протокол TCP), позволяющие дождаться ответа о приеме данных от второй стороны?

А разве send() с параметрами по умолчанию, то есть без MSG_DONTWAIT не поступает именно так?

Nastishka ★★★★★
()

Пусть удалённая сторона присылает подтверждение транзакции после того как применит все действия и сделает fsync. Это единственный правильный вариант.

На tcp расчитывать не стоит потому что даже если оно доставлено это не значит что все действия применены.

true_admin ★★★★★
()

Ответ однозначный. Гарантированную доставку данных можно сделать исключительно на уровне приложения. На TCP в этом случая надеяться никак нельзя. Если ты рассчитываешь, что машина может неожиданно упасть, то не забудь прикрутить проверку работоспособности канала на уровне приложения (посылай тестовые пакеты). Правда тут может помочь опция SO_KEEPALIVE, но она тоже не идеал. Проверка на уровне приложения все равно лучше.

anonymous
()

Читай Стивенса, там все подробно расписано.

capricorn20
()
Ответ на: комментарий от anonymous

Спасибо за ответы.
Примерно так ситуацию себе и представлял.

Tayler ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.