Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: socket select deadlock  (Прочитано 9101 раз)
0 Пользователей и 1 Гость смотрят эту тему.
pegucka
Интересующийся

by
Offline Offline

« : 02-05-2014 07:26 » 

Здравствуйте.
Разрабатывая сетевое приложение на c++ столкнулся со следующей проблемой - приложение повисает на функции select до завершения таймаута. Таймаут по словию - 2 минуты. Сокет используется локальный, т. е. общение идёт с приложением на той же машине. С передающей стороной так же всё в порядке проверял с помощью Wireshark - пакеты уходят. Не подскажите в чём может быть проблема?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 02-05-2014 07:34 » 

pegucka, покажи куски кода, в которых ты делаешь сетевую пересылку данных, с обеих сторон соединения.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
pegucka
Интересующийся

by
Offline Offline

« Ответ #2 : 02-05-2014 08:45 » 

Я точно не знаю, могу ли я выкладывать куски кода  Меня одолевают смутные сомнения. Да и проблема не настолько очевидная потому как воспроизводится один-два раза в сутки и далеко не на всех машинах. По этому был бы длагодарен за общую информацию
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 02-05-2014 08:55 » 

pegucka, ну ты же можешь вырезать из кусков кода всё, не относящееся к делу?

Если баг редкий и плавающий, общей информацией тут не отделаться. Почему ты уверен, что причина в select?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 02-05-2014 09:09 » 

pegucka, ожидание возможно на длительной операции, в локальной системе причина длительной операции одна: либо буфер пуст, и ждёт чтение, либо буфер переполнен, и ждёт запись. Т.е. так или иначе нужно смотреть, какие из концов сетевых соединений перестают работать, и синхронные операции подвисают. select тут лишь - симптом, а не причина.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 06-05-2014 09:37 » 

Либо опечатка в программе, либо логическая ошибка. Функция select проста как пень. Рекомендую внимательно пройтись глазами по программе.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
pegucka
Интересующийся

by
Offline Offline

« Ответ #6 : 12-05-2014 12:08 » 

Переписал метод приёма сообщений, заменив select на poll. Тот же результат - раз в несколько дней повисает на 2 минуты, как будто данные не получены. Хотя Wireshark показывает, что всё приходит. OS - RHEL5.4
Записан
pegucka
Интересующийся

by
Offline Offline

« Ответ #7 : 13-05-2014 12:38 » new

А будет ли select отрабатывать корректно, если данные стали готовы для чтения до его вызова?
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #8 : 13-05-2014 13:09 » 

А будет ли select отрабатывать корректно, если данные стали готовы для чтения до его вызова?
Да, должен отрабатывать нормально.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines