让我们考虑下面的代码
pollfd file_descriptors[1]; file_descriptors[0].fd = sock_fd; file_descriptors[0].events = POLLIN; int return_value = poll(file_descriptors, 1, 0); if (return_value == -1) { cerr << strerror(errno); } else if (return_value == 0) { cerr << "No data available to be read"; } else { if (file_descriptors[0].revents & POLLIN) { recv(sock_fd, buff, 1024, 0); } }
现在我对上面的代码有两个问题.
如果对poll()的调用既不返回也-1
没有在数组中的第一个条目的位图中0
设置POLLIN
标志,那么调用是否会阻塞?如果不是,那么数据是否会即时读取?revents
file_descriptors
recv()
假设呼叫poll()
的方式与上面提到的相同.要读入多少数据?它只是和普通电话一样recv()
吗?即1024
在上述情况下小于或等于任意(对程序员)的数量.然后,如果我想poll()
再次阅读之前,我是否只是从第一次调用开始重复,poll()
直到完全读取所有数据(即在客户端服务器方案中,这将对应于正在完成的请求)?
谢谢!