For happy path, we fixed the bug that address socket leak.  For failure path (less occurrence), I originally do nothing and let it fall back to GC to keep code simple.   Since I added retry, I decided to do a proper cleanup.  Hence, I started apply this across both happy and unhappy paths.