看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.31.81 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1426757905.A.8D6.html
LiloHuang: 如果要用 blocking I/O,已經開 thread 就直接 recv 吧 03/19 17:49
LiloHuang: 不曉得那些是 blocking 的 fd 還是 non-blocking 的 fd 03/19 17:50
LiloHuang: 一般是 select 搭配 timeout + while loop with flag 03/19 17:52
LiloHuang: 真的要暴力停止的話,可以送一個 signal 給該 thread 03/19 17:54
LiloHuang: 此時 select 就應該會退出 blocking state,返回 EINTR 03/19 18:00
LiloHuang: 推文一請忽略,我想你應該是要等待一個以上的 fd :P 03/19 18:18
kingofsdtw: 實作一個data controler, if(open(temp_control)) 03/19 23:43
chubiei: 送signal給thread, select自然就會跳出來了 03/19 23:43
LiloHuang: 記得 Android 上也有 pselect,用 pselect 更方便處理 03/19 23:53
LiloHuang: 這兒有完整的範例程式碼 http://goo.gl/H2DkXm 03/19 23:53
asxz87: 加個dummy/signal sockfd到infd, send data讓select被trig 03/19 23:54
asxz87: ger 03/19 23:54
Killercat: select要用signal殺 不過既然都用C++了 用asio吧 03/20 01:14
tccheart: 謝謝各位大大! 03/20 17:44