集群系统MOSIX分析(4)
2008-12-01 11:02:39 来源:WEB开发网comm_accept() :在Mosix通讯套接字上接受连接
int comm_accept(mosix_link *ml, mosix_link **mlp, mosix_addr *ma, unsigned long t)
接受建立连接请求,mlp指向建立的新连接,连接的另一端的地址保存在ma中。
comm_waitaccept() :在Mosix通讯套接字上接受连接
static int
comm_waitaccept()comm_waitaccept()调用comm_accept接收连接请求并建立一条新的连接,然后comm_use这条新的连接并关闭旧的连接。
comm_send() :发送一条消息 (head + data)
int comm_send(int type, void *head, int hlen, void *data, int dlen, int uspace)
如果要发送的数据来自用户空间(uspace),且可能会导致远程page-fault(!dirty_all_remote_pages),则先把数据从用户空间拷入内核,然后检查地址范围的有效性(!ucache_ok)。
如果type & COMM_MFREGS或则type & COMM_MFIDENT,则分别通过comm_packregs(0, 0)和comm_packident(0)进行压缩,可能产生选项数据。
将数据按照消息格式组装起来,然后调用套接字操作集上的sendmsg操作将消息发送出去。
comm_sendto() :发送一个数据报
int comm_sendto(int mos, void *data, int len, mosix_link *mlink, mosix_addr *to)
通过mlink连接,发送len长的数据到to指明的地址,发送的数据在data中。
to指明目的地址,如果为空,则数据是发送给节点mos上的负载信息守护进程(INFO_DAEMON)。
调用套接字操作集上的sendmsg操作将消息发送到指定的地址。
comm_dorecv() :从连接中可靠的读取数据
int comm_dorecv(struct socket *sock, struct msghdr *msg, int len)
更多精彩
赞助商链接