Я делаю клиентское серверное приложение. Ранее в приложении, если клиент спустился, сервер попытается повторно подключиться (то есть, если recv()
на стороне сервера вернет значение 0, сервер вернется, чтобы принять соединение). Теперь я хочу изменить сервер, разрешив ему подключаться к нескольким клиентам. Я думал об использовании poll()
, чтобы сервер мог проверять каждый клиент на какое-то время. Я хотел узнать с poll
, как я могу проверить, потерялось ли соединение с клиентом?Обнаружение потери связи с помощью poll()
0
A
ответ
0
При использовании мультиплекс И.О. с poll
, вы можете обрабатывать отключение соединения со следующими событиями:
POLLIN
, когда есть данные для чтения, и когда вы делаете вызов наread
илиrecv
функцию, убедитесь, что вы проверили возвращаемое значение, обычно возвращаемое значение0
указывает, что соединение было отключено. Это совпадает с предыдущей версией одного клиента.POLLRDHUP
, который указывает, что сверстник закрыл соединение или выключил запись половины соединения.POLLERR
другие ошибки.
Когда три события запускаются, это означает, что клиент закрыл соединение, или есть ошибки в сокете, вы обычно закрываете сокеты.