Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Плохое соединение 
:(
    Опции темы
SVN74
Дата 3.11.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Есть соединение на основе блокирующего  сокета,   при плохой работе сети естественно возникает  «SOCKET_ERROR»  (при обмене данными) .
Плохое соединение вызвано мелкими неравномерными скачками сети (в виде кратковременного разрыва), в целом скорость передачи данных высока.
Кто подскажет как можно  «за грубить» сокет от скачков в сети, UDP не подойдет, так, как доставка данных строго обязательна. 
==========
Использую WinSock...  


Это сообщение отредактировал(а) SVN74 - 3.11.2008, 00:28
PM MAIL WWW   Вверх
J0ker
Дата 3.11.2008, 04:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 1
Всего: 14



Цитата(SVN74 @  3.11.2008,  00:24 Найти цитируемый пост)
Есть соединение на основе блокирующего  сокета,   при плохой работе сети естественно возникает  «SOCKET_ERROR»  (при обмене данными) .

а ошибка-то какая?


--------------------
user posted image
PM MAIL   Вверх
SVN74
Дата 3.11.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Цитата(J0ker @  3.11.2008,  04:37 Найти цитируемый пост)
а ошибка-то какая? 

Ошибка возникает на  сокете в любой ситуации при плохой работе сети в виде значения SOCKET_ERROR (-1).
К примеру идет пересылка данных, в этот момент в сети происходит кратковременное падение пропускной способности, причем падение достигает такого уровня, что сокет возвращает (-1) и происходит это на столько быстро и неравномерно, что если закрыть глаза на   "SOCKET_ERROR (-1)" и продолжить опять цикл чтения - сокет опять начинает получать данные.
Конечно, можно было бы просто пропускать ошибку сокета, но хотелось бы просто "загрубить" сам сокет на предмет "ожидания времени отклика".
 


PM MAIL WWW   Вверх
J0ker
Дата 3.11.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 1
Всего: 14



ошибка возвращается в значении errno (*nix) или WSAGetLastError() (win)
далее, обычно для TCP соединения любая ошибка (за исключением EWOULDBLOCK) означает разрыв соединения - тут ничего продолжать невозможно.
какой у вас сокет - UDP или TCP?


--------------------
user posted image
PM MAIL   Вверх
SVN74
Дата 3.11.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Цитата(J0ker @  3.11.2008,  19:29 Найти цитируемый пост)
какой у вас сокет - UDP или TCP?

Использую TCP, WSAGetLastError() -> возвращает: "Удаленный хост принудительно разорвал соединение"
=================
Если бы как ни будь притормозить сокет, этой ошибки не было бы, а соединение как ни странно "иногда" можно восстановить, но не всегда, сам удивлен...

Это сообщение отредактировал(а) SVN74 - 3.11.2008, 20:03
PM MAIL WWW   Вверх
J0ker
Дата 3.11.2008, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 1
Всего: 14



вы ничего не можете с этим сделать
для TCP любая ошибка (кроме EWOULDBLOCK для неблокирующего сокета) означает разрыв соединения
то, что сокет в вашем случае остается живой и вы можете его использовать несмотря на ошибку - просто частный случай конкретной реализации - вы не можете на это расчитывать даже в пределах одной ОС той-же версии - реализация библиотеки сокетов может быть различной. При получении ошибки вы должны считать соединение разорванным.
Как мне видится, единственное простое решение в вашем случае - автоматически пытаться создать новое соединение и продолжить сессию - т.е. реализовать уровень сессии - при этом случайный разрыв соединения не будет разрывом сессии, т.е. снаружи будет выглядеть так, будто никакого разрыва не было.

Это сообщение отредактировал(а) J0ker - 3.11.2008, 20:36


--------------------
user posted image
PM MAIL   Вверх
SVN74
Дата 3.11.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Спасибо, я об этом тоже подумал - для передачи файлов я так и сделаю, но у меня есть данные и не только "файлы" но и звук и видео, вот как мне в этом случае быть, как  я узнаю когда сеть разрывает, а когда клиент сам разрывает связь ( к примеру у клиента комп. вырубился)? В остальных случаях я к примеру могу конечно передать "код-end" .
PM MAIL WWW   Вверх
J0ker
Дата 3.11.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 1
Всего: 14



Цитата(SVN74 @  3.11.2008,  21:01 Найти цитируемый пост)
но и звук и видео

для этого используют UDP-based протоколы, т.к. важнее своевременная доставка контента, нежели целостность. Т.е. допускаются потери пакетов, но взамен имеется непрерывность воспроизведения.



--------------------
user posted image
PM MAIL   Вверх
SVN74
Дата 3.11.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Цитата(J0ker @  3.11.2008,  21:32 Найти цитируемый пост)
для этого используют UDP-based протоколы, т.к. важнее своевременная доставка контента, нежели целостность. Т.е. допускаются потери пакетов, но взамен имеется непрерывность воспроизведения.

в звуке у меня применяется MP3 кодек, в нем ошибки просто недопустимы, поэтому использую TCP

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.