LINUX.ORG.RU

Fsync для сокета


0

0

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

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

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

★★

Re: Fsync для сокета

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

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

Nastishka ★★★★★ ()

Re: Fsync для сокета

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

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

true_admin ★★★★★ ()

Re: Fsync для сокета

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

anonymous ()

Re: Fsync для сокета

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

capricorn20 ()
Ответ на: Re: Fsync для сокета от anonymous

Re: Fsync для сокета

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

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