2013-10-01 85 views
1

我已經開發了具有多個設備但是將數據發送回通過藍牙套接字連接的服務器設備,Android應用程序我遇到的錯誤:EAGAIN EWOULDBLOCK的Android

E/bt-btif: send none, EAGAIN or EWOULDBLOCK, errno:11 

我已閱讀,在插座出現這些錯誤接收設備的套接字緩衝區已滿的連接,但是我不知道如何在Android應用程序中處理它。是否有一種方法可以在嘗試傳輸之前檢查這些錯誤,或者如果發生這些錯誤,請稍後再抓住它們並稍後重試傳輸?

回答

2

如果您得到EAGAIN,只需再次重試相同的操作。

如果得到EWOULDBLOCK,則必須使用非阻塞套接字,並且請求的操作會導致套接字阻塞調用線程。使用select()等待阻塞條件清除,然後再次重試原始操作。

+0

EAGAIN和EWOULDBLOCK是同一個'errno.'的不同名稱。只有第二段適用。 – EJP

+0

EAGAIN在所有平臺上並不總是與EWOULDBLOCK相同,這就是我將它們分開的原因。 [EAGAIN是什麼意思?](http://stackoverflow.com/questions/4058368/) –

+0

有趣的是瞭解,我得到它通過使用BufferedOutputStream進行套接字通信,而不是確保有字節的緩衝區可以當時不會被傳送以後重試。 –

相關問題