в систему получил следующую задачу:Проверка на наличие ошибок перед RECV() называемых
Я сделал сервер, который способен обрабатывать несколько подключение с помощью выберите(). Но выбрать возвращает клиент (индекс FD_SET), также если сокет только что получил ошибку, например, «отключение клиента» или что-то еще.
Можно ли проверить розетку без вызова recv(). Потому что получить мне нужно, чтобы получить буфер из моего «BUFFERPOOL»
Пример кода:
int ret = recv(client, buffer_pool->get(), BUFFER_SIZE, 0);
if(ret == -1) ... // something went wrong
Ну тогда я должен освободить буфер снова, и это было довольно много отходов одного буфера в моем пуле. (В течение короткого промежутка времени)
Так не возможно проверить сокет без вызова ПРИЕМА()
, к сожалению, err_code 0 каждый раз, и если RECV() возвращает 0 (ошибка) – Aurus
@Aurus: если он возвращает 0, а recv возвращает 0, тогда вы, вероятно, получили EOF (т.е. другая сторона закрыла соединение). –
, но они также равны 0, если клиентское соединение все еще живое. – Aurus