当前位置: 技术问答>linux和unix
socket 阻塞模式下怎么从服务器群发
来源: 互联网 发布时间:2016-06-28
本文导语: while(1) { new_fd=accept(); } 类似与这样,我想实现服务器端群发功能 就是accept()函数能从listen()函数里取得多个新的套接字 然后存入数组, 进行循环群发 但是有个问题 accept()函数是阻塞模式下的 如果没有客户端跟他连...
while(1)
{
new_fd=accept();
}
类似与这样,我想实现服务器端群发功能
就是accept()函数能从listen()函数里取得多个新的套接字
然后存入数组,
进行循环群发
但是有个问题
accept()函数是阻塞模式下的 如果没有客户端跟他连接,我想退出循环 可是accept会一直等待,无法退出
请问有什么好方法 可以在阻塞模式下实现我想要的功能
切记是单线程的
{
new_fd=accept();
}
类似与这样,我想实现服务器端群发功能
就是accept()函数能从listen()函数里取得多个新的套接字
然后存入数组,
进行循环群发
但是有个问题
accept()函数是阻塞模式下的 如果没有客户端跟他连接,我想退出循环 可是accept会一直等待,无法退出
请问有什么好方法 可以在阻塞模式下实现我想要的功能
切记是单线程的
|
linux下连epoll都算阻塞模型吧。
accept()函数是阻塞模式下的 如果没有客户端跟他连接,我想退出循环 可是accept会一直等待,无法退出
请问有什么好方法 可以在阻塞模式下实现我想要的功能
现在你是说只能单线程,而又不让阻塞在listen或者accept??
那我还真没办法了。。
select也是阻塞的。
accept()函数是阻塞模式下的 如果没有客户端跟他连接,我想退出循环 可是accept会一直等待,无法退出
请问有什么好方法 可以在阻塞模式下实现我想要的功能
现在你是说只能单线程,而又不让阻塞在listen或者accept??
那我还真没办法了。。
select也是阻塞的。
|
但是基本上没有实现不了的功能,是你把前提限定死了,为何不可以多线程呢?又或者一定要退出accpet呢?
|
如果局域网你要实现的话,
而且单线程实现、只能用广播了。。。
而且单线程实现、只能用广播了。。。
|
用select可以设置超时时间啊,
当然也可以用alarm
当然也可以用alarm