当前位置:  开发笔记 > 编程语言 > 正文

poll()系统调用以及之后接收或发送数据的行为

如何解决《poll()系统调用以及之后接收或发送数据的行为》经验,为你挑选了0个好方法。

让我们考虑下面的代码

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标志,那么调用是否会阻塞?如果不是,那么数据是否会即时读取?reventsfile_descriptorsrecv()

    假设呼叫poll()的方式与上面提到的相同.要读入多少数据?它只是和普通电话一样recv()吗?即1024在上述情况下小于或等于任意(对程序员)的数量.然后,如果我想poll()再次阅读之前,我是否只是从第一次调用开始重复,poll()直到完全读取所有数据(即在客户端服务器方案中,这将对应于正在完成的请求)?

谢谢!

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有