A problem related to this is that when I have a transfer "running" that has stalled, closing the app causes the process to remain in memory and get stuck there, eventually bailing out with an "abnormal program termination".
That's strange. I'll check it.
I've been having a quite flaky Internet-connection recently, so I often have timeouts where the server doesn't seem to respond - still I'm unable to interrupt and retry the transfer because the program waits for the server to respond to a packet which never arrived.
My suggestion: have the ability to "brute-force cancel" the background transfer (i.e. disconnect the socket.)