[问题] select 问题

楼主: tccheart (123)   2015-03-19 17:38:21
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
android jni c++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
小弟最近使用android 的jni 写 c的 socket
我是client端 除了主执行绪外开了一条thread , 用select传入NULL去咬住等资料进来
(不设timeout)
但当我要结束连线的时候 select函数仍然咬著 主执行绪切不断
请问有无方法在主执行绪 让这个select wake up 然后再断线 ?
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
res = select(sockfd + 1, &infd, &outfd, &errfd, NULL);
补充说明(Supplement):
作者: LiloHuang (十年一刻)   2015-03-19 17:49:00
如果要用 blocking I/O,已经开 thread 就直接 recv 吧不晓得那些是 blocking 的 fd 还是 non-blocking 的 fd一般是 select 搭配 timeout + while loop with flag真的要暴力停止的话,可以送一个 signal 给该 thread此时 select 就应该会退出 blocking state,返回 EINTR推文一请忽略,我想你应该是要等待一个以上的 fd :P
作者: kingofsdtw (不能閒下來!!)   2015-03-19 23:43:00
实作一个data controler, if(open(temp_control))
作者: chubiei (:))   2015-03-19 23:43:00
送signal给thread, select自然就会跳出来了
作者: LiloHuang (十年一刻)   2015-03-19 23:53:00
记得 Android 上也有 pselect,用 pselect 更方便处理这儿有完整的范例程式码 http://goo.gl/H2DkXm
作者: asxz87 ( )   2015-03-19 23:54:00
加个dummy/signal sockfd到infd, send data让select被trigger
作者: Killercat (杀人猫™)   2015-03-20 01:14:00
select要用signal杀 不过既然都用C++了 用asio吧
楼主: tccheart (123)   2015-03-20 17:44:00
谢谢各位大大!

Links booklink

Contact Us: admin [ a t ] ucptt.com