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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SO_RCVTIMEO и SO_SNDTIMEO 
:(
    Опции темы
moloto4ek
Дата 28.9.2010, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, появились вопросы.
Скажите пожалуйста, когда нужен timeout на send ? опцией SO_SNDTIMEO.
И скажите почему нужно закрывать сокет когда одна из функций (send, recv), ранние выставлена функцией setsockopt(); вылетела по таймауту, чем это грозит? И вообще стоит юзать такой метод или лучше обойтись select();
Спасибо!
PM MAIL   Вверх
Олег2005
Дата 28.9.2010, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



С одного из форумов:

SO_{SND,RCV}TIMEO are probably the most widely
unimplemented, or strangely/incompatibly implemented, of all
common sockopts in existence... Basically, in short, NEVER try to use them for anything... ;-)

If you want I/O timeouts, your only real option in most cases is
to roll your own, using either blocking/alarm()-based timeouts, or
non-blocking/select()-based timeouts... The latter probably being
the best choice,
 and least likely to cause pain (especially if you
ever need to write multi-threaded code)... 

MSDN
SO_RCVTIMEO and SO_SNDTIMEO

    When using the recv function, if no data arrives during the period specified in SO_RCVTIMEO, the recv function completes. In Windows versions prior to Windows 2000, any data received subsequently fails with WSAETIMEDOUT. In Windows 2000 and later, if no data arrives within the period specified in SO_RCVTIMEO, the recv function returns WSAETIMEDOUT, and if data is received, recv returns SUCCESS.

    If a send or receive operation times out on a socket, the socket state is indeterminate, and should not be used; TCP sockets in this state have a potential for data loss, since the operation could be canceled at the same moment the operation was to be completed.

Короче все говорят - что не надо использовать - ни в никсах,ни в винде.....
PM MAIL WWW MSN   Вверх
JackYF
Дата 29.9.2010, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Олег2005 @  28.9.2010,  13:37 Найти цитируемый пост)
С одного из форумов:

Цитата(Олег2005 @  28.9.2010,  13:37 Найти цитируемый пост)
Короче все говорят 

Не сходится.

Цитата(Олег2005 @  28.9.2010,  13:37 Найти цитируемый пост)
MSDN

Цитата(Олег2005 @  28.9.2010,  13:37 Найти цитируемый пост)
не надо использовать - ни в никсах

Тоже не сходится.

Цитата(Олег2005 @  28.9.2010,  13:37 Найти цитируемый пост)
If you want I/O timeouts, your only real option in most cases is
to roll your own, using either blocking/alarm()-based timeouts, or
non-blocking/select()-based timeouts... The latter probably being
the best choice, and least likely to cause pain (especially if you
ever need to write multi-threaded code)... 

То есть, вместо уже написанного кода человек предлагает городить свой велосипед? Нет уж, спасибо. Использовать select() на каждый чих - тоже, не очень-то разумно.

Ну и, возвращаясь к исходному вопросу:
Цитата(moloto4ek @  27.9.2010,  23:47 Найти цитируемый пост)
Скажите пожалуйста, когда нужен timeout на send ? опцией SO_SNDTIMEO.

Когда нужен timeout на send. Не нужен - не используй.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Олег2005
Дата 29.9.2010, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Цитата(JackYF @  29.9.2010,  21:39 Найти цитируемый пост)
Не сходится.

Все три источника - и можно привести еще больше - сходятся на одном и том же.
Не желательно...
Не рекомендуется...и тд....
А вот что пишет Стивенс (насчет никсов):
1. Поддержка этих двух параметров  не требуется Posix. т.е. не очень приветствуется...
2. В реализациях типа Беркли эти два значения определяют таймер отсутствия сетевой активности....
(Стр. 236)
PM MAIL WWW MSN   Вверх
JackYF
Дата 30.9.2010, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Олег2005 @  29.9.2010,  22:01 Найти цитируемый пост)
Все три источника - и можно привести еще больше - сходятся на одном и том же.
Не желательно...
Не рекомендуется...и тд....

Надёжность источника "на форуме пишут" без ссылок на нормативные документы и/или собственное тестирование стремится к нулю.

Источник "MSDN" принимается, но только для Windows.

Источник "Стивенсон":

Цитата(Олег2005 @  29.9.2010,  22:01 Найти цитируемый пост)
Поддержка этих двух параметров  не требуется Posix

Принято.
Цитата(Олег2005 @  29.9.2010,  22:01 Найти цитируемый пост)
т.е. не очень приветствуется...

Не принято. Из чего это следует?

Цитата(Олег2005 @  29.9.2010,  22:01 Найти цитируемый пост)
В реализациях типа Беркли эти два значения определяют таймер отсутствия сетевой активности....

Принято. С оговоркой, что единственная вменяемая альтернатива в виде select() ничем не лучше по функциональности, но заставит писать значительно больше кода.

А теперь мой контраргумент (статья 2009 года): http://portabilityblog.com/blog/archives/1...O_RCVTIMEO.html
Выдержка:
Цитата

Mac OS X, Linux, FreeBSD and AIX were all among the platforms where I was able to use these timeouts in a simple test, using reasonably recent versions of these operating systems. This means that the OSes accepted setting the option and the timeout that was configured did actually work. The BSD socket implementation that is used in Microsoft Windows also falls into this category, the timeouts work reliably there.


Подводя итоги, я соглашусь, что эти параметры работают не на всех системах. Однако здравый смысл говорит мне, что процент POSIX-совместимых систем, не принимающих SND/RCV TIMEO, меньше, чем вероятность ошибиться в своей реализации I/O-таймаутов у даже опытного программиста. Следовательно, я бы рекомендовал использовать эти параметры вместо всех предложенных альтернативных решений.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Олег2005
Дата 1.10.2010, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Скажем так.
Сойдемся на том, что рекомендовать что-то однозначно - для всех абсолютно ОС - просто неприемлемо.
В мире наверно уже более 30? разных реализация модуля TCP - и у каждой ОС будут свои предпочтения - или заморочки.
Потому Стивенс и пишет - уклончиво......
И в вашей ссылке есть завершающее резюме:
"In summary, you can actually expect these timeouts to either work or cause an error when you try to set them on most UNIX and Unix-like operating systems, and also on Windows, but if you are really concerned about portability, you need a backup plan, and either a whitelist of platforms where the backup plan is not necessary, or a very short blacklist that mostly consists of HP-UX."
PM MAIL WWW MSN   Вверх
JackYF
Дата 2.10.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Олег2005 @  1.10.2010,  08:34 Найти цитируемый пост)
Сойдемся на том, что рекомендовать что-то однозначно - для всех абсолютно ОС - просто неприемлемо.

Да, согласен.


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


 




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


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

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