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.