Я видел этот вопрос на дескрипторе, передающем SO.
я написал следующие две программы для работы с Unix-доменным сокетом
которые предназначены для работы как
Основная программа принимает все клиентские соединения и отправляет эти дескрипторы в запущенную сервисную программу (приемник дескриптора). Приемник-дескриптор возвращает дескриптор и устанавливает его в fd_set and use select
чтобы проверить, читается ли дескриптор или нет, если он готов к чтению, а затем прочитайте дескриптор в буфера и отправить длину строки клиенту.
Note: я am testing using telnet on ubuntu 14.10
Основная проблема с этой программой заключается в том, что FD_ISSET() return false
даже если дескриптор готов к чтению, т.е. Select() продолжает ждать. Некоторое время он работает, в этом случае он получает несколько сообщений и зависает.
Я пробовал все три варианта функций дескриптора send и recv, но ни один из них не работает отлично.
Как разрешить эту ошибку?
Я провожу много часов, чтобы найти ошибку в приведенном выше коде. Он был в дескрипторе приемника на линии № 153, где я забыл рассчитать максимальное значение дескриптора recvd.
recv()
не обязательно получает столько данных, сколько ему было сказано, но мало. Всегда проверяйте возвращаемое значение, если количество байтов имеет значение.