Сокет домена Unix: отправка файлового дескриптора и выбор ()

0

Я видел этот вопрос на дескрипторе, передающем SO.

я написал следующие две программы для работы с Unix-доменным сокетом

которые предназначены для работы как

Основная программа принимает все клиентские соединения и отправляет эти дескрипторы в запущенную сервисную программу (приемник дескриптора). Приемник-дескриптор возвращает дескриптор и устанавливает его в fd_set and use select чтобы проверить, читается ли дескриптор или нет, если он готов к чтению, а затем прочитайте дескриптор в буфера и отправить длину строки клиенту.

Note: я am testing using telnet on ubuntu 14.10

Основная проблема с этой программой заключается в том, что FD_ISSET() return false даже если дескриптор готов к чтению, т.е. Select() продолжает ждать. Некоторое время он работает, в этом случае он получает несколько сообщений и зависает.

Я пробовал все три варианта функций дескриптора send и recv, но ни один из них не работает отлично.

Как разрешить эту ошибку?

  • 0
    Обратите внимание, что recv() не обязательно получает столько данных, сколько ему было сказано, но мало. Всегда проверяйте возвращаемое значение, если количество байтов имеет значение.
  • 0
    Это нормально, но, по крайней мере, должно быть несколько байт <= MAX.
Показать ещё 2 комментария
Теги:
sockets
unix-domain-sockets

1 ответ

0

Я провожу много часов, чтобы найти ошибку в приведенном выше коде. Он был в дескрипторе приемника на линии № 153, где я забыл рассчитать максимальное значение дескриптора recvd.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню