Как обнаружить соединение, закрытое localhost? - PullRequest
1 голос
/ 06 сентября 2011

Я написал TCP клиент и сервер на C. Эти программы работают ТОЛЬКО на одном компьютере.

1) Мой TCP-клиент отправляет команду на сервер (localhost).

2) Сервер усердно работает и дает ответ.

Проблема в том, что если TCP-клиент закрывает соединение, я не могу обнаружить закрытое соединение клиента, пока сервер будет выполнять свою долгую работу. Я могу обнаружить это только с помощью функции SEND, но уже слишком поздно, потому что сервер уже работает.

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

Спасибо.

1 Ответ

1 голос
/ 06 сентября 2011

Вы можете сделать это с помощью select следующим образом:

  • Используйте select для чтения событий в сокете.Поэтому select разблокируется, когда сокет доступен для чтения
  • Когда на сервер поступает запрос, начинайте работу в другом потоке
  • Когда клиент закрывает соединение, select разблокируется, а recv прочитает 0 байтов.Если это так, вы можете остановить рабочий поток
  • Если рабочий поток завершает задачу без прерывания, он может отправить результат
...