Jabberd2源代码分析: client连接c2s

客户端连接c2s

 

c2s调用mio_listen后,处于监听状态,等待客户端连接。

 

client->c2s: connect->accept

客户端连接c2s服务器5222端口

 

当mio检测到处于监听状态的socket可读后,调用_mio_accept函数

void _mio_accept(mio_t m, mio_fd_t fd)

该函数中调用accept返回一个新的socket fd,将返回的fd加入到mio中,调用回调函数_c2s_client_mio_callback(action_ACCEPT)

 

int _c2s_client_mio_callback(mio_action_t = action_ACCEPT)

在action_ACCEPT中:

创建一个sess_t,用于保存客户端的信息。获取到客户端的IP端口号信息,进行必要的检测。然后调用:

sess->s = sx_new(c2s->sx_env, fd->fd, _c2s_client_sx_callback, sess);

mio_app(m, fd, _c2s_client_mio_callback, (void *) sess); 

和router通讯类似,这个_c2s_client_sx_callback函数和_c2s_client_mio_callback配合用于处理用户的IO读写等操作。

 

然后调用 xhash_put将sess插入到c2s->session中 key为client端的socket fd。

最终调用 sx_server_init(sess->s, flags)结束函数。

 

void sx_server_init(sx_t s, unsigned int flags)

函数中调用插件函数 server

设置expat解析回调函数

XML_SetElementHandler(s->expat,_sx_server_element_start,_sx_server_element_end);

XML_SetStartNamespaceDeclHandler(s->expat,_sx_server_ns_start);

设置完成后,调用_sx_event(event_WANT_READ),设置读事件.

 

 

 

至此连接建立完成,c2s服务器进入mio_run循环,等待客户端发送数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值