// Wait until data can be read without blocking.
size_t read_some(implementation_type& impl,
const null_buffers&, asio::error_code& ec)
{
// Wait for descriptor to become ready.
descriptor_ops::poll_read(impl.descriptor_, ec);
return 0;
}
inside descriptor_ops
int poll_read(int d, asio::error_code& ec)
{
if (d == -1)
{
ec = asio::error::bad_descriptor;
return -1;
}
pollfd fds;
fds.fd = d;
fds.events = POLLIN;
fds.revents = 0;
errno = 0;
int result = error_wrapper(::poll(&fds, 1, -1), ec);
if (result >= 0)
ec = asio::error_code();
return result;
}
pollfd
,原型定义在哪里?
::poll
引用哪个文件的投票?
ioctl
,fcntl
适用于unix和窗口系统?
const null_buffers&
,将引用传递给null_buffer的用法是什么?
THX
答案 0 :(得分:1)
/usr/include/poll.h
poll.h
中的那个!这是一个系统调用。WSAIoctl
,但没有任何与fcntl
(你拼写错误)完全相同的内容。reactive_descriptor_service
类中提取了该代码。一般来说,read_some
方法读取数据,reactive_descriptor_service
看起来是接口的实现,只是阻塞直到可以读取,然后可能会有一些更高的调用者读取并缓冲实际数据。因此,可以通过通用接口优化和实现轮询调用,而无需对所有数据进行双缓冲。因此,内部类稍微重载了read_some
的含义,并且在此实现中,不使用buffers参数,因此传递了伪参数。