You may want to change the un/reliable part.
TCP is no longer used for reliable transport in the currently used DirectX implementation.

unreliable means - send UDP and forget about it
reliable means - resend UDP several times until the client confirms the package or the client is dropped because of too much lag.

-- slacer