LinuxForum.Fans
Тема

Сокет

Автор: Mihail 8 сообщений 2014 просмотров
#63137

Серверу, с которым соединилось некоторое количество клиетов нужно им всем быстро раздать имеющиеся данные (для каждого свои).
Длинна данных превышает допустимую за одну отправку функцией send. Можно ли используя неблокирующий режим отправить несколько частей подряд в один сокет, если не то как проверить можно ли посылать?

#63152

Можно ли используя неблокирующий режим отправить несколько частей подряд в один сокет, если не то как проверить можно ли посылать?

Попробуйте и узнаете. Или уже не получается?

#63165

Пока сервер и клиент на одной машине все может и пройти, а что будет в реальных условиях узнаю когда уже будет поздно.

#63180

При потери связи с клиентом (отсуствие ответа через опр. время) - закрывайте соединение (в отд. потоке).

#63187

Потеря соединения - это был следующий вопрос. (и вообще-то в имеющейся задаче не предполагается передача данных с клиентов на сервер, кроме авторизации при открытии соединения).
А этот вопрос был - можно ли в существующее соединение посылать пакеты не дожидаясь получения предыдущего пакета клиетом ( send(sock,str1,strlen(str1),MSG_DONTWAIT);send(sock,str2,strlen(str2),MSG_DONTWAIT); ) - линукс их будет ставить в очередь или терять?

#63212

линукс их будет ставить в очередь или терять?

Пакеты могут придти в обратном порядке. Н-р, сначала 2-ой, а потом - 1-ый.
Для подтверждения получения данных после 2-х send ожидайте ответа от клиента.

#63449

Надеюсь пакеты удастся сделать такими чтобы порядок их прихода не имел значения.
А возможно ли убедить броузер (часть клиетов будут броузеры) присылать сообщение после получения каждого пакета я не знаю (если он этого сам не делает наверно не возможно).

Кроме неправильной последовательности пакетов могут еще какие-то проблемы вылезти?

#63453

А возможно ли убедить броузер (часть клиетов будут броузеры) присылать сообщение после получения каждого пакета

Тогда нужно работать уже на более низком к сетевой карте уровне. Создавайте связь с установлением соединения (в этом типе есть подтверждение отправляемых пакетов). Еще зависит от исп-го протокола. В этом случае я бы сделал так (в асинхронном режиме) - один поток отправляет данные, а другой получает подтверждения об приеме пакетов.
В другом случае я бы исп-л 2 потока, каждый из которых в синхронном режиме отправлял свою половину данных. Когда в обоих потоках вернется управление из send, значит оба пакета отправлены. Если хотя бы 1 поток не возвращает управления на протяжении, скажем, 5 секунд, тогда 3-ий поток прекращает его работу и решает что пакеты не досталены и надо повторить передачу.

Войдите или зарегистрируйтесь, чтобы ответить.