Ошибка сегментации в recv () - PullRequest
2 голосов
/ 03 сентября 2010

Я пишу клиент / серверные программы на Unix на C, используя send / recv. Я иногда получаю ошибку сегментации от вызова recv. Поведение не идеально воспроизводимо; иногда это происходит, а иногда программа запускается до конца.

Есть идеи, что это может значить?

Ответы [ 3 ]

5 голосов
/ 03 сентября 2010

Если ошибка сегментации происходит в самом вызове recv(), то это означает, что буфер, который вы передали recv(), выделен неправильно или не соответствует размеру, указанному вами recv().

3 голосов
/ 03 сентября 2010

Ну, обычно это означает, что вы получаете больше данных, чем допустил ваш буфер.

Например, если вы malloc 20 байтов и recv 1000 байтов, вы столкнетесь с этимпроблема.

К сожалению, не видя код и без каких-либо очень быстрых достижений в области психической отладки, мы никогда не узнаем наверняка * a .


* a Это тонкий намек на размещение кода, кстати: -)

0 голосов
/ 03 сентября 2010

Это также может означать, что сокет на другой стороне закрыт до того, как вы в него напишите. Это SIGPIPE, который может привести к закрытию вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...