// 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;
}内部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
发布于 2013-08-29 17:08:59
/usr/include/poll.hpoll.h里的那个!是个系统电话。WSAIoctl,但是没有什么与fcntl完全相同(您拼错了)。reactive_descriptor_service类中提取了该代码。通常情况下,read_some方法读取数据,reactive_descriptor_service看起来是接口的实现,它只是阻塞,直到读取成为可能,然后可能会有更高的调用者读取和缓冲实际的数据。因此,可以通过通用接口优化和实现轮询调用,而无需对所有数据进行双缓冲。因此,内部类稍微重载了read_some,在这个实现中,没有使用缓冲区参数,因此将传递一个虚拟参数。https://stackoverflow.com/questions/18516726
复制相似问题