title: Direct TCP/IP connections in P2P apps
body: <p>From a <a href="http://www.joelonsoftware.com/items/2007/01/26.html" rel="nofollow noreferrer">Joel's post on Copilot</a>:</p>
  
  <blockquote>
    <p>Direct Connect! We’ve always done
    everything we can to make sure that 
    Fog Creek Copilot can connect in any
    networking situation, no matter  what
    firewalls or NATs are in place. To
    make this happen, both parties  make
    outbound connections to our server,
    which relays traffic on their  behalf.
    Well, in many cases, this isn’t
    necessary. So version 2.0 does 
    something rather clever: it sets up
    the initial connection through our 
    servers, so you get connected right
    away with 100% reliability. But then 
    once you’re all connected, it quietly,
    in the background, looks for a  way to
    make a direct connection. If it can’t,
    no big deal: you just keep  relaying
    through our server. If you can make a
    direct peer-to-peer  connection, it
    silently shifts your data onto the
    direct connection. You  won’t notice
    anything except, probably, much faster
    communication.</p>
  </blockquote>
  
  <p>How do they change the server connection to a P2P connection?</p>