Отправка структур через сокеты домена Unix

Я использую сокеты домена Unix для межпроцессного взаимодействия в Linux. После подключения клиент отправляет на сервер структуру с помощью send. Эта структура содержит некоторую информацию о клиенте, включая строку идентификатора в конце. Сервер получает только что найденную информацию и отправляет обратно другую структуру. Клиент блокируется с помощью recv, но ничего не получает. Сервер завершает вызов send без ошибок и продолжает работу.

Есть ли что-то фундаментальное, чего мне здесь не хватает? Когда я отправляю строки через сокет, обе стороны отправляют и получают нормально. Должны ли данные иметь завершающий NULL? Это не кажется правильным ...


person waffleman    schedule 13.09.2010    source источник
comment
Находятся ли сокеты в режиме дейтаграммы или потока?   -  person Ben Voigt    schedule 14.09.2010
comment
Они в потоковом режиме.   -  person waffleman    schedule 14.09.2010
comment
Ваш вопрос подразумевает, что это происходит только со структурами. Все нормально работает с целыми числами или символами?   -  person Mike DeSimone    schedule 14.09.2010
comment
Это похоже на то, что было бы объяснено на странице руководства для одного из соответствующих вызовов функций. Не то чтобы это плохой вопрос для SO, я просто посоветовал бы вам внимательно изучить документацию, пока вы ждете ответов.   -  person David Z    schedule 14.09.2010
comment
То, что вы описали, должно работать нормально. Может быть, попытаться выделить проблему в небольшом образце кода?   -  person caf    schedule 14.09.2010
comment
@ Дэвид: Страницы руководства - это первое место, которое я проверил и не нашел ничего подходящего.   -  person waffleman    schedule 14.09.2010


Ответы (2)


Когда я пришел на следующий день, я не смог снова воспроизвести ошибку.

person waffleman    schedule 09.11.2010

Попробуйте промыть сокет на сервере.

person Steve Emmerson    schedule 13.09.2010
comment
Я не вижу ничего, кроме close, что могло бы очистить сокет. - person waffleman; 14.09.2010
comment
Попробуйте установить для аргумента flags функции send() значение MSG_EOR. - person Steve Emmerson; 14.09.2010