|
楼主 |
发表于 2007-12-22 21:40:20
|
显示全部楼层
不对,Acceptor默认的是阻塞的!
socket,this->peer_acceptor_.enable (ACE_NONBLOCK)是在Aceeptor初始化的时候设定的,但是当Accptor监听到客户请求时会调用activate_svc_handler()函数:
它会根据flag_的值来设定从客户端连接进来的socket是阻塞的还是非阻塞的
// See if we should enable non-blocking I/O on the <svc_handler>'s
// peer.
if (ACE_BIT_ENABLED (this->flags_,
ACE_NONBLOCK))
{
if (svc_handler->peer ().enable (ACE_NONBLOCK) == -1)
result = -1;
}
// Otherwise, make sure it's disabled by default.
else if (svc_handler->peer ().disable (ACE_NONBLOCK) == -1)
flags_就是Acceptor构造函数的第三个参数,默认是0:
ACE_Acceptor (const ACE_PEER_ACCEPTOR_ADDR &local_addr, ACE_Reactor *=ACE_Reactor::instance(), int flags=0, int use_select=1, int reuse_addr=1)
0表示阻塞方式
1表示非阻塞方式
可以通过Acceptor的构造函数来设定socket的阻塞方式。
不知道说的对不对,大家一起讨论一下! |
|