[問題] 如何定位NDK Block issue
這問題有點難描述...不是Crash, 所以不能用ndk-stack下去看
而是Native code的程式碼被Blocked住了
同樣的程式碼, 在Android 6之前都運行正常, 在Android 7之後就出現了
由於是Linux based, Linux 我試不出來此Bug
程式碼邏輯大概是這樣
開一個 listen socket -> 設成 NonBlocking Mode
epoll -> 得到一個 Read Event -> Accept new socket
程式碼來自於知名Network Library, 我想錯誤的機率不大
經過夾擊之後, 我發現問題可能出在 Accept new socket這部分
Accept前後程式碼沒有System call, 並且沒有Blocking的可能
根據 Linux Manual 上所寫
If no pending connections are present on the queue, and the socket is not
marked as nonblocking, accept() blocks the caller until a connection is
present. If the socket is marked nonblocking and no pending connections are
present on the queue, accept() fails with the error EAGAIN or EWOULDBLOCK.
理論上根本不會有問題...
於是作了以下嘗試
1. 在Accept之前再次將 Socket 設成 non-blocking => 沒用
2. 在Accept前後加上 __android_log_print 做夾擊 => 做不出來, 但不是我想要的解法
我的問題主要有兩個
1. 如何證明 accept 會卡住
2. 如何避開這個問題
卡關了很久, 希望有人給我一點想法吧, 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.87.63
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1540006153.A.A89.html
※ windows2k:轉錄至看板 LinuxDev 10/20 12:06
推
10/20 12:56,
6年前
, 1F
10/20 12:56, 1F
→
10/20 14:52,
6年前
, 2F
10/20 14:52, 2F
→
10/20 14:53,
6年前
, 3F
10/20 14:53, 3F
→
10/20 14:53,
6年前
, 4F
10/20 14:53, 4F
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章