CSE lab7 RPC 攻略

part A marshall: 通过观察可以得知,所有无符号的整形的实现相当于从高位到低位的每个字节依次调用rawbyte,所有的有符号整形都是直接调用同一尺寸的无符号整形。 一种实现是调用rawbyte4次,另一种是调用ushort的重载方法两次。 unmarshall: 这回引用传参不能强转了,所以每个尺寸的无符号和有符号整形写了两遍相同的代码。 不解释,直接照搬int的实现就成。 part B checkduplicate_and_update: 1. 遍历一遍reply_t的list(reply_window_[clt_nonce]) 对于每个reply_t对象: 1.1 如果xid等于参数xid且cb_present为true,将那个对象的buf和sz赋给参数*b和*sz,返回DONE 1.2 如果xid等于参数xid且cb_present为false,返回INPROGRESS 2. 如果list不为空 且参数xid小于所有reply_t对象的xid 返回FORGOTTEN 3. 删掉list中所有满足xid < xid_rep的对象 4. 向list插入一个新的reply_t对象,它的xid为参数xid,cb_present为false 返回NEW *. 为了删除和判断方便,可以把list实现成按照xid升序排列的 add_reply: 1. 遍历一遍reply_t的list 对于每个reply_t对象: 1.1 如果xid等于参数xid 将参数的b和sz赋给对象的buf和sz 并将对象的cb_present置为true 之后break

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券