Reuse channels

store a cache of the channels so a single pid can re-use a connection
this needs to be per pid as when you fork you keep the original memory
space and we can't control currency across pids