Пишу клиент-серверный проект для организации торговли.
Возникла проблема: юзаю select() для установки таймаута, с read()/recv() всё шикарно. Немного хуже с write()/send(). Мне надо точно знать, дошёл ли мой ответ до клиента. Я использую TCP, т.е. мне как-то надо заставить дождаться возвращения пакета ACK функцию write() и только потом продолжить выполнение программы.
Пример: открыли соединение, всё шикарно. обениваемся данными. В один прекрасный момент кто-то выдёргивает сетевой кабель, а клиент, допустим, отправляет серверу сообщение о том, что платёж проведён. Что будет: write() скопирует данные из моего буфера в системный и потом пойдёт дальше. Но данные то не дойдут (если, к примеру, кабель врубят через день), а приложение об этом не узнает. Так вот, надо бы, чтоб программа продолжила выполнение только после приёма ACK-пакета.
Понимаю, что можно потом самому послать TCP-пакет с подтверждением, но что-то это некрасиво. Не зря же TCP существует) Transmission Control Protocol, как никак)
Подскажите, плз, если ли выход? Книжка Стивенса чёт надежды не даёт(
Похожие темы
- Форум [Не]блокирующие сокеты (2006)
- Форум Блокирующие функции сокетов. (2004)
- Форум SIGPIPE и write() на сокетах (2012)
- Форум O_NONBLOCK + write(сокет). Почему EWOULDBLOCK? (2023)
- Форум VirtualBox Shared Folder: write блокирует read (2013)
- Форум close после write в сетевой сокет (2015)
- Форум Дождался. (2012)
- Форум Дождались (2012)
- Форум дождалися? (2008)
- Форум Дождались (2008)