Обратите внимание, что в сообщении об ошибке указано local:5037
, а не tcp:5037
. На самом деле ADB пытается подключиться к сокету Unix в /tmp/5037
, что не удается.
В моем случае это было из-за того, что я раньше запускал adb как root. Таким образом, сокет принадлежал root, что запрещало моему пользователю удалять его. Соответствующая выдержка из strace adb fork-server server
:
socket(PF_LOCAL, SOCK_STREAM, 0) = 8
unlink("/tmp/5037") = -1 EPERM (Operation not permitted)
setsockopt(8, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(8, {sa_family=AF_LOCAL, sun_path="/tmp/5037"}, 12) = -1 EADDRINUSE (Address already in use)
close(8) = 0