LINUX.ORG.RU

asio, bad file descriptor(EBADF)

 ,


0

2

привет!

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

клиент выполняет:

  1. подключение к серверу
  2. обмен публичными ключами
  3. отсылает один пакет данных
  4. в основном находится в ожидании

проблема в том, что первые три пункта выполняются успешно, но после некоторого ожидания, при попытке послать серверу очередные данные, запись завершается с ошибкой «bad file descriptor»(EBADF)

попытки понять кто/кодга и почему закрывает сокет - ничего не дали. (сокет, вроде бы, ни клиент, ни сервер, не закрывают)

вопрос в том, есть ли какой-то софт, которым я могу мониторить состояние сокета извне?

ну и вообще, какие мысли?

спасибо.

★★★

В tcp это вроде бы нормальная практика: - подключился - передал/принял - отключился Если надо что ещё передать/принять, то создаешь подключение заново.

anonymous
()

Из софта для слежения за сокетами: netstat, wireshark.

Однако, есть подозрение, что у вас какие-то объекты в памяти могут протухать (быть удаленными и переиспользованными). Из-за чего при обращении по старым указателям программа натыкается на мусор вместо актуальных данных. Отсюда и EBADF: подсунули в какую-то функцию мусор вместо нормально дескриптора сокета и получили ошибку.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

касательно софта - на рсдн напомнили про strace. пытаюсь поймать sendmsg() для сокета, для которого уже был вызван close().

про подозрения - я тоже так думаю. но не могу ничего найти «на моей стороне»...

niXman ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.