2013-10-01 2 views
1

Я разработал Android приложения, которое имеет несколько устройств отправки данных обратно к устройству сервера через соединение патрубков Bluetooth, однако я испытывает ошибку: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 для связи сокетов вместо этого, чтобы обеспечить наличие буфера для байтов, который мог бы не передаваться в это время для повторного рассмотрения позже. –

Смежные вопросы