Yes, it is absolutely safe to access the sending and receive from two different streams at the same time.
If you want your application to scale to 100 active sockets, you need to use the BeginReceiveve / BeginSend methods, and not create threads manually. This will do the magic behind the scenes, so you wonβt create 100 threads to handle sockets. What exactly this does depends on the platform. In windows, you will use the "high performance" completion ports. Under linux (mono) you will use epoll, I believe. In any case, you end up using a lot less threads than active sockets, which is always good :)
source share