Отключите незанятые розетки / клиенты C - PullRequest
0 голосов
/ 27 апреля 2011

Я использую оператор select(), который обрабатывает несколько клиентских подключений с использованием сокетов Unix C. Я хотел бы отключить незанятых клиентов - если я не получаю сообщений от клиентов после определенного периода. Я посмотрел на функциональность тайм-аута select(), но это для всех избранных, а не для отдельных клиентов.

Как бы вы разорвали соединение для определенных клиентов?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

Для сервера вы обычно вызываете select в цикле. В верхней части цикла вы создаете списки файловых дескрипторов из клиентских подключений. На этом этапе я бы вычислил самое длинное, которое вы хотите подождать в выбранном вами списке (наименьшее время до истечения времени ожидания следующего клиентского соединения). Затем вызовите select с этим таймаутом. После завершения выбора вы проверяете каждое из соединений, чтобы увидеть, были ли получены данные, получено ли новое соединение или истекло ли время ожидания. Обработайте любые данные, откройте / закройте все соединения, а затем вернитесь к началу цикла.

1 голос
/ 27 апреля 2011

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

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