While experiencing an extremely slow download rate on one of my HTTP connections, I thought it'd be nice if I could just transfer the connection from my PC to an energy-saving home server that shares the same external IP address.

The way I imagine it, I'd like to run a command that would take over the connection from a specific IP and a port, letting me pipe all incoming data that flows through it to a file without letting the original owner of the connection to close it.

I don't think this is possible given the underpinnings of how a TCP/IP connection works in addition to the NAT firewall providing you the ability to share your external IP address among multiple computers on your LAN. That being said there are some tips/tricks which might help, one you understand how they work.

Tip #1 - screen/tmux

Typically what I do is if I have a large file to download, I'll ssh into another computer on my network, and run screen/tmux there. With a screen/tmux session I can run long running programs (such as a download) in a terminal without having them stop when I disconnect the ssh connection to this secondary machine.

Tip #2 - xdg-open

This program allows you to run files and/or URL's through the preferred application. For example, I've setup Firefox on a remote machine on my LAN so that it has an association for the 'magnet://' handler. With this on the remote machine, I can run commands like this:

On my laptop, and it will "trigger" my remotemachine to start downloading that magnet link through Firefox, which will then pass that URL on to the application that's associated with handling magnet:// links. In this case I'm using Vuze to do the handling.

From an IP, TCP and NAT perspective, this is definitely possible. I can imagine the server take on the PCs IP address. I can also imaging the server's Linux kernel prepare a connection transfer by initializing the required socket data structures and protocol control block. The actual connection transfer would require some coordination between the two Linux kernels.

And indeed one promising approach exists: TCP Connection Passing. It consists of a kernel patch which extends the socket API for connection passing and a set of tools to initiate the passing. This approach takes the role of the application layer into account.

The thing is: a TCP connection also involves an application state shared between the two ends. Both ends expect each other act according to that state. So if you replace one end by some generic entity which just sucks up data, not replying anything, you risk breaking the state (and thus the connection) just by not behaving properly. This might not be an issue for the scenario you've described, but it limits the applicability of the generic connection passing scheme you have in mind. So no, I don't think quite such a thing exists but TCP Connection Passing is a good start. You can tailor it to your needs.