Skip to main content
dirty python network graphite hacks

dirty python network graphite hacks

·164 words·1 min
Matthew Sawasy
Author
Matthew Sawasy
Always busy. Never bored.

I’ve been pushing historical temperature data for Vancouver into a local graphite instance using python. While pushing the data, I received this error:

socket.error: [Errno 99] Cannot assign requested address  

This was strange, as I had been using the address in the loop many, many, MANY times before hitting this error. A little more sleuthing uncovered a ton of connections in the TIME_WAIT state. Around 26,000 open sockets was where I couldn’t open any more.

This little gem, was the fix:

sock.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,struct.pack('ii', 1, 0))
sock.close()  

Normally, after cleanly closing the connecting in python, the system will still hold the connection open for a minute or two in the TIME_WAIT state. This was causing port exhaustion. The above lines told python to send a RST (reset) which will immediately drop the connection.

Graphite complains about the reset, but does log the data.

Connection to the other side was lost in a non-clean fashion.  

Perhaps, not the most elegant solution, but it served my purpose.