Я использую функцию socket_has_data()
ниже, чтобы уведомить, есть ли у (блокирующего) сокета данные. Если да, то я вызываю recv()
из того же потока. Я делаю это так, потому что пока не могу перейти на неблокирующий сокет.
Я столкнулся с ошибкой, при которой socket_has_data()
возвращает true, но recv()
блокируется, не возвращая никаких данных.
Должно ли это быть возможным/правильно ли я использую poll()
?
bool socket_has_data()
{
const size_t timeout_ms = 0;
const size_t num_fds = 1;
const int ret = ::poll(_fds, num_fds, timeout_ms);
if(ret > 0)
{
if (_fds[0].revents & POLLIN)
{
return true;
}
}
return false;
}
void configure_socket()
{
_fds[0].fd = this->_sockfd; // socket descriptor from socket()
_fds[0].events = POLLIN;
}
struct pollfd _fds[1];
Станимир
Вопрос задан30 июня 2024 г.