[問題] 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