I have this method as part of my listener class, which I believe ought to trigger a reconnect in the event of a heartbeat timeout.
It doesn't seem to work, and stomp.py seems to end up sending data to an unconnected socket (which it handles gracefully).
DEBUG:stomp.py:Heartbeat timeout: diff_receive=23.0276641846, diff_heartbeat=13.0276241302, time=1388048391.94, lastrec=1388048378.92
DEBUG:pbls.sinks:Heartbeat timed out - attempting a reconnect
DEBUG:pbls.sinks:Reconnecting: Attempt 1
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 2
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 3
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 4
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 5
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 6
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 7
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 8
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:stomp.py:Starting receiver loop
DEBUG:pbls.sinks:Reconnecting: Attempt 9
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:stomp.py:Starting receiver loop
DEBUG:pbls.sinks:Reconnecting: Attempt 10
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 11
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 12
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 13
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 14
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 15
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 16
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 17
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 18
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 19
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 20
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 21
DEBUG:stomp.py:Starting receiver loop
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 22
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 23
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 24
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:stomp.py:Starting receiver loop
DEBUG:pbls.sinks:Reconnecting: Attempt 25
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:stomp.py:Starting receiver loop
DEBUG:pbls.sinks:Reconnecting: Attempt 26
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:stomp.py:Starting receiver loop
DEBUG:pbls.sinks:Reconnecting: Attempt 27
DEBUG:stomp.py:Starting receiver loop
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:pbls.sinks:Reconnecting: Attempt 28
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:stomp.py:Starting receiver loop
DEBUG:pbls.sinks:Reconnecting: Attempt 29
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:stomp.py:Starting receiver loop
DEBUG:pbls.sinks:Reconnecting: Attempt 30
INFO:stomp.py:Sending frame ['STOMP', '\n', 'accept-version:1.1\n', 'heart-beat:10000,10000\n', '\n', '\x00']
DEBUG:stomp.py:Starting receiver loop
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended
DEBUG:stomp.py:Receiver loop ended