2016-05-09 10 views
0

Я делаю клиентское серверное приложение. Ранее в приложении, если клиент спустился, сервер попытается повторно подключиться (то есть, если recv() на стороне сервера вернет значение 0, сервер вернется, чтобы принять соединение). Теперь я хочу изменить сервер, разрешив ему подключаться к нескольким клиентам. Я думал об использовании poll(), чтобы сервер мог проверять каждый клиент на какое-то время. Я хотел узнать с poll, как я могу проверить, потерялось ли соединение с клиентом?Обнаружение потери связи с помощью poll()

ответ

0

При использовании мультиплекс И.О. с poll, вы можете обрабатывать отключение соединения со следующими событиями:

  • POLLIN, когда есть данные для чтения, и когда вы делаете вызов на read или recv функцию, убедитесь, что вы проверили возвращаемое значение, обычно возвращаемое значение 0 указывает, что соединение было отключено. Это совпадает с предыдущей версией одного клиента.

  • POLLRDHUP, который указывает, что сверстник закрыл соединение или выключил запись половины соединения.

  • POLLERR другие ошибки.

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