Feeler connections are short-lived connection made to check that a node is alive, useful for test-before-evict, and for moving addresses from the new to the tried table.
We currently send a GETADDR message to feelers, but then disconnect before being able to receive a response. It seems to me that the GETADDR is not useful and can be removed.
More broadly, addr relay with feelers isn’t useful: we are receiving plenty of address information already through getaddr to outbounds, and the addresses from feelers are likely low quality, given that they come from addresses we’re not even sure are running a Bitcoin node.
I couldn’t find any previous discussion about this, but I found PR #22777, that similarly made sure that we don’t ask for tx relay to feelers.
I noticed this behavior on my peer-observer instance: I would see the number of sent GETADDR messages increase over time, but the number of ADDR messages with >100 addresses received (which are likely GETADDR responses and not self announcements relays) wouldn’t increase as much. I later realized that it was my node opening feeler connections, sending a GETADDR, and closing the connection.
You can see the same behavior using this command - the node is making feeler connections, sending getaddr to them, closing before receiving the addr response:
0~ ₿ tail -f ~/.bitcoin/debug.log | grep -E "(Making feeler connection|Added connection to|sending getaddr|feeler connection completed|Received addr: [0-9]{2,} addresses)"
1
22026-04-02T13:25:50Z [net] Making feeler connection to xyz.onion:8333
32026-04-02T13:26:06Z [net] Added connection to xyz.onion:8333 peer=27
42026-04-02T13:26:08Z [net] sending getaddr (0 bytes) peer=27
52026-04-02T13:26:08Z [net] feeler connection completed, disconnecting peer=27, peeraddr=xyz.onion:8333
On a node that accepts inbounds connections, this command can be used to see in the logs all the nodes that connected, sent a getaddr, and disconnected before receiving a reply. It is possible that these nodes connected to us as a feeler:
0~ ₿ cat .bitcoin/debug.log | awk '
1
2 /received: getaddr/ {
3 split($0, a, "peer=")
4 got_getaddr[a[2]] = $0
5 }
6
7 /sending addr/ {
8 split($0, a, "peer=")
9 sent_addr[a[2]] = 1
10 }
11
12 /socket closed/ {
13 split($0, a, "peer=")
14 id = a[2]
15
16 if (id in got_getaddr && !(id in sent_addr)) {
17 print "possible feeler: " got_getaddr[id]
18 print " " $0
19 }
20
21 delete got_getaddr[id]
22 delete sent_addr[id]
23 }
24'
25
26possible feeler: 2026-04-01T21:45:13Z [net] received: getaddr (0 bytes) peer=2311974
27 2026-04-01T21:45:13Z [net] socket closed, disconnecting peer=2311974
28possible feeler: 2026-04-02T00:18:58Z [net] received: getaddr (0 bytes) peer=2426389
29 2026-04-02T00:18:58Z [net] socket closed, disconnecting peer=2426389
30...
Then, you can manually inspect one of them:
0~ ₿ cat .bitcoin/debug.log | grep -E "peer=2311974"
12026-04-01T21:45:13Z [net] Added connection peer=2311974
22026-04-01T21:45:13Z [net] received: version (102 bytes) peer=2311974
32026-04-01T21:45:13Z [net] sending version (102 bytes) peer=2311974
42026-04-01T21:45:13Z [net] send version message: version 70016, blocks=943279, txrelay=0, peer=2311974
52026-04-01T21:45:13Z [net] sending wtxidrelay (0 bytes) peer=2311974
62026-04-01T21:45:13Z [net] sending sendaddrv2 (0 bytes) peer=2311974
72026-04-01T21:45:13Z [net] sending verack (0 bytes) peer=2311974
82026-04-01T21:45:13Z [net] receive version message: /Satoshi:27.0.0/: version 70016, blocks=943279, us=x.x.x.x:8333, txrelay=0, peer=2311974
92026-04-01T21:45:13Z [net] received: wtxidrelay (0 bytes) peer=2311974
102026-04-01T21:45:13Z [net] received: sendaddrv2 (0 bytes) peer=2311974
112026-04-01T21:45:13Z [net] received: verack (0 bytes) peer=2311974
122026-04-01T21:45:13Z New inbound v1 peer connected: version: 70016, blocks=943279, peer=2311974
132026-04-01T21:45:13Z [net] sending sendcmpct (9 bytes) peer=2311974
142026-04-01T21:45:13Z [net] sending ping (8 bytes) peer=2311974
152026-04-01T21:45:13Z [net] sending getheaders (1029 bytes) peer=2311974
162026-04-01T21:45:13Z [net] initial getheaders (943278) to peer=2311974 (startheight:943279)
172026-04-01T21:45:13Z [net] received: getaddr (0 bytes) peer=2311974
182026-04-01T21:45:13Z [net] Advertising address x.x.x.x:8333 to peer=2311974
192026-04-01T21:45:13Z [net] socket closed, disconnecting peer=2311974
202026-04-01T21:45:13Z [net] Resetting socket for peer=2311974
212026-04-01T21:45:13Z [net] sending addrv2 (24665 bytes) peer=2311974
222026-04-01T21:45:13Z [net] Cleared nodestate for peer=2311974