Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> syswrite и "Resource temporarily unavailable", ошибки при записи в сокет 
:(
    Опции темы
Poldan
Дата 13.5.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ, не подскажите как бороться с "Resource temporarily unavailable" при записи в неблокирующий сокет с помощью функции syswrite?
Да, чаще они возникают когда нагрузка возрастает, но сервер мощный - брендовый.

Конструкция вроде 

Код

do {
                    $sw = syswrite($SOCK, $buff, length($buff));

                                    } while (($sw < 1 || !defined($sw)) &&
                                    sleep(0.005));


не помогает - при возрастании нагрузки сервер просто впадает в ступор.

Какие параметры можно покрутить в perl'е или самой ОС, для того чтобы повысить производительность сокета и минимизировать количество ошибок? (FreeBSD 7.2) Очень прошу помощи...
PM MAIL   Вверх
DurRandir
Дата 13.5.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Потому что у ОС кончается буфер для записи, и вы используете неблокирующий режим (в блокирующем - поток был бы остановлен до возможности полностью записать данные). И бороться с этим увеличением буферов - не надо. Раз возникает такая ошибка, то до этого вы перевели сокет в неблокирующий режим. Если это сделано не просто так, а вы где-то уже используете select/poll/kq/enyevent/ev/poe для проверки доступности сокета "на чтение" - используйте этот же самый механизм для проверки доступности "на запись". syswrite вернёт, сколько байт он записал в сокет - отбрасывайте их и, при следующей возможности, пробуйте дописать оставшееся.

PM   Вверх
Pfailed
Дата 13.5.2010, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sleep(0.005) насколько я понимаю эквивалентно sleep(0)


--------------------
PM MAIL   Вверх
Poldan
Дата 14.5.2010, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(DurRandir @ 13.5.2010,  15:37)
... и вы используете неблокирующий режим (в блокирующем - поток был бы остановлен до возможности полностью записать данные). И бороться с этим увеличением буферов - не надо ...

Похоже Вы правы и подверждаете мои, пока хрупкие, мысли по этому поводу. Что-то такое встречал и в гугле ). Будем копать в этом направлении. Спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




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


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

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