LINUX.ORG.RU

socketpair() создаёт сокет с непустым буфером

 


0

2

Собственно subj. В программе активно используется системный вызов socketpair(), в один ужасный момент socketpair() создаёт сокет, в котором уже есть какие-то данные. Естественно на данные в этом сокете завязана некоторая логика, которая никак не ожидает получить оттуда, то что во второй конец не отправляли. В этой же программе активно используется вызов getaddrinfo(). И такое ощущение, что в качестве непридвиденных данных в сокете от socketpair() оказывается то, что писал в свой сокет getaddrinfo(). В частности там виден домен (без точки) и еще несколько нечитаемых байт. Гарантированно, что в этот сокет пишу не я.

Гарантирует ли вообще socketpair(), что буфер вновь созданных сокетов будет пустым? Может ли баг в программе вызвать такое поведение (если учесть что записи этих данных в сокет точно не производится), например из-за повреждения памяти?

Может ли баг в программе вызвать такое поведение

дык по приведённым признакам там и есть баг..память пропахана..

обсуждать нечего - берите отладчик, или расставляйте printf`ы и заодно пересматривайте код.

MKuznetsov ★★★★★
()

Мамай в памяти? валгриндом его!

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от MKuznetsov

valgrind сходу ничего не нашел. Кстати еще socketpair() и getaddrinfo() выполняются в разных тредах параллельно. Может ли это быть проблемой?

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

getaddrinfo() является потоко-безопасной, да и я просто не могу представить как на буфер выделяемой под сокет в ядре может влиять getaddrinfo(), если я не ошибаюсь то буферы всех сокетов в ядре лежат?

Onito
()
Ответ на: комментарий от Olegymous

а у тебя по ходу выполнения программы сокеты созданные socketpair закрываются? Может в один прекрасный момент выделяется память там где до этого был другой сокет, а данные в нём не обнулились или типо того - я это говорю основываясь не на чём.

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

Сокеты закрываю.

Чудеса продолжаются. Сделал apt-get upgrade, помимо прочего прилетел апдейт ядра. Я перезагрузился и теперь тестовая программа работает уже часа 4 без сабжевой проблемы. Вот и что теперь думать: ядро было бракованное в debian stable или просто совпадение? В общем продолжу наблюдения.

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

ну тогда радуйся :) возможно был баг в ядре или конкретно у тебя

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