Observe que o erro indica local:5037
, não tcp:5037
. O ADB está realmente tentando se conectar a um soquete unix em /tmp/5037
, que falha.
No meu caso, isso foi porque eu corri adb como root antes. Assim, o soquete era de propriedade do root, proibindo meu usuário de removê-lo. Trecho relevante de 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