Well what I meant is in C++ I created another thread (process).
So I got 2 processes running cause in C++ the recv function is blocking by default(You can set it to non blocking but that doesn't matter right now)
Well I don't know how this is done in C# but what I mean by creating 2 loops in separate threads to handle the messages(packets) and just forward them was this:
Wait for an client to connect. (Normally your app blocks here till someone connects)
If a client connects you already got one part done. cause now you have an active connection between the client and your little proxy. but now you just need to connect to the server.
In C++ i created another thread to just connect to the official login server of silkroad so at that point I got 2 threads running (The main one and the one created by myself)
the main one handles the client to the offcial server packets and the one I created by myself sens the packets of the offical server to the client.
It's a bit tricky to get at first and I hope that someone has a better solution for you since my main programming language isnt' C#.
This is a little image of how the whole thing works.
I hope this explained things a little bit better