В коде сервера я хочу использовать pselect, чтобы ждать, пока клиенты будут подключаться, а также отслеживать стандартный вывод создаваемых мной prozesses и отправлять их клиенту (например, упрощенную удаленную оболочку).Использование pselect для синхронного ожидания
Я попытался найти примеры того, как использовать pselect, но я их не нашел. Сокет, в котором клиент может подключиться, уже настроен и работает, поскольку я проверил, что с accept(). SIGTERM заблокирован.
Вот код, где я пытаюсь использовать pselect:
waitClient()
{
fd_set readers;
fd_set writers;
fd_set exceptions;
struct timespec ts;
// Loop until we get a sigterm to shutdown
while(getSigTERM() == false)
{
FD_ZERO(&readers);
FD_ZERO(&writers);
FD_ZERO(&exceptions);
FD_SET(fileno(stdin), &readers);
FD_SET(fileno(stdout), &writers);
FD_SET(fileno(stderr), &writers);
FD_SET(getServerSocket()->getSocketId(), &readers);
//FD_SET(getServerSocket()->getSocketId(), &writers);
memset(&ts, 0, sizeof(struct timespec));
pret = pselect(FD_SETSIZE, &readers, &writers, &exceptions, &ts, &mSignalMask);
// Here pselect always returns with 2. What does this mean?
cout << "pselect returned..." << pret << endl;
cout.flush();
}
}
Так что я хочу знать, как ждать с pselect, пока не будет получено событие, поскольку в настоящее время pselect всегда возвращается немедленно со значением 2 Я попытался установить тайм-аут в NULL, но это ничего не меняет.
Возвращаемое значение pselect (если положительное) является filedescriptor, вызвавшим событие?
Я использую fork() для создания новых прожекторов (еще не реализовано). Я знаю, что мне приходится ждать() на них. Могу ли я ждать от них? Полагаю, мне нужно записать сигнал SIGCHILD, так как я могу это использовать? wait() на дочернем блоке также блокирует, или я могу просто заглянуть, а затем продолжить с pselect, иначе мне придется параллельно блокировать ожидания.
Так или иначе, нет смысла ждать от писателей? Или только для писателей на сокете? – Devolus
@Devolus Если вы не отправляете большой объем данных в сокеты, очень маловероятно, что блокировки будут блокироваться. Я обнаружил, что на самом деле бесполезно иметь набор записей в большинстве случаев, так как дескрипторы в нем будут в основном готовы. –
Спасибо. Я весь день заходил в Google, но я не нашел описания очень ясным. – Devolus