svc_recv函数实现详解
来源:互联网 发布:nba历年总决赛数据 编辑:程序博客网 时间:2024/06/07 04:44
在前一篇文章 RPC程序的一般结构 – nfsd 讲到了 RPC 程序的一般结构.
svc_recv 函数从所有的连接(svc_xprt)里尝试读取一个完整的请求(svc_rqst), 不过, 函数返回时, 可能没有任何就绪的请求, 所以, nfsd 代码中通过一个 while 循环读取请求.
rpc 程序是多线程的, 所以代码中不少地方用到了锁. 主线程之外的线程作为生产者, 将就绪(可读, 已关闭等)的连接加入到 xprt_queue, 在主线程中 svc_recv 作为消费者, 一次从队列弹出一条连接, 尝试读取数据.
加锁, 然后弹出一条就绪的连接.
如果连接设置了 XPT_CLOSE 位, 说明连接已经关闭, 将其删除.
如果这是一条监听连接, 则调用 xpo_accept 接受一条新连接. 这种操作和 socket 操作几乎是一样的. 新连接被加到队列中, 同样, 需要锁.
最后, 连接中有数据需要读取, 调用 xpo_recvfrom 方法读取数据. xpo_recvfrom 方法的返回值指示已读取的字节数, 或者指示请求是否已经读取完整. 如果没有读取完整, 返回 -EAGAIN 作为 svc_recv 的返回值.
Related posts:
- RPC程序的一般结构 – nfsd
- svc_process函数
- sunrpc 函数功能分析
- 网络传输层封装
- 网游服务器的架构 – 层次结构
阅读全文
0 0
- svc_recv函数实现详解
- STL sort 函数实现详解
- STL sort 函数实现详解
- 字符串函数---itoa()函数详解及实现
- 字符串函数---atof()函数详解及实现
- 动态窗口实现(API函数AnimateWindow详解)
- 动态窗口实现(API函数AnimateWindow详解)
- strchr()函数的详解与实现
- memcpy函数的实现+应用--详解
- 变参函数的实现详解
- 详解STL中next_permutation()函数实现
- scanf函数使用和实现详解
- C++虚函数详解&实现机制&多态性
- C++虚函数实现原理详解
- C++ vector用法(详解!!函数,实现)
- C++ 虚函数 详解 及实现
- 字符串函数---atof()函数详解及实现(完整版)
- 字符串函数---atoi()函数详解及实现(完整版)
- tomcat配置server.xml
- php 微信二次分享 图片出现不了、描述变域名等问题
- Android Camera相机原理解析(源码)
- Linux登陆——账号和密码文件 /etc/passwd和/etc/shadow
- 《深入理解java虚拟机》学习笔记9——对象的创建
- svc_recv函数实现详解
- 四种处理散列冲突的方法
- 关于WebView的两个问题
- 【CodeForces
- 【java基础】注解(Annotation)
- 论述:为什么选择PM
- POJ
- Saver
- MyBatis 从入门到熟悉.md