Серверу, с которым соединилось некоторое количество клиетов нужно им всем быстро раздать имеющиеся данные (для каждого свои).
Длинна данных превышает допустимую за одну отправку функцией send. Можно ли используя неблокирующий режим отправить несколько частей подряд в один сокет, если не то как проверить можно ли посылать?
Сокет
Можно ли используя неблокирующий режим отправить несколько частей подряд в один сокет, если не то как проверить можно ли посылать?
Попробуйте и узнаете. Или уже не получается?
Пока сервер и клиент на одной машине все может и пройти, а что будет в реальных условиях узнаю когда уже будет поздно.
При потери связи с клиентом (отсуствие ответа через опр. время) - закрывайте соединение (в отд. потоке).
Потеря соединения - это был следующий вопрос. (и вообще-то в имеющейся задаче не предполагается передача данных с клиентов на сервер, кроме авторизации при открытии соединения).
А этот вопрос был - можно ли в существующее соединение посылать пакеты не дожидаясь получения предыдущего пакета клиетом ( send(sock,str1,strlen(str1),MSG_DONTWAIT);send(sock,str2,strlen(str2),MSG_DONTWAIT); ) - линукс их будет ставить в очередь или терять?
линукс их будет ставить в очередь или терять?
Пакеты могут придти в обратном порядке. Н-р, сначала 2-ой, а потом - 1-ый.
Для подтверждения получения данных после 2-х send ожидайте ответа от клиента.
Надеюсь пакеты удастся сделать такими чтобы порядок их прихода не имел значения.
А возможно ли убедить броузер (часть клиетов будут броузеры) присылать сообщение после получения каждого пакета я не знаю (если он этого сам не делает наверно не возможно).
Кроме неправильной последовательности пакетов могут еще какие-то проблемы вылезти?
А возможно ли убедить броузер (часть клиетов будут броузеры) присылать сообщение после получения каждого пакета
Тогда нужно работать уже на более низком к сетевой карте уровне. Создавайте связь с установлением соединения (в этом типе есть подтверждение отправляемых пакетов). Еще зависит от исп-го протокола. В этом случае я бы сделал так (в асинхронном режиме) - один поток отправляет данные, а другой получает подтверждения об приеме пакетов.
В другом случае я бы исп-л 2 потока, каждый из которых в синхронном режиме отправлял свою половину данных. Когда в обоих потоках вернется управление из send, значит оба пакета отправлены. Если хотя бы 1 поток не возвращает управления на протяжении, скажем, 5 секунд, тогда 3-ий поток прекращает его работу и решает что пакеты не досталены и надо повторить передачу.