[Mono-list] Threads & Asynchronous Sockets
Giuseppe Greco
giuseppe.greco@agamura.com
Wed, 15 Oct 2003 09:43:32 +0200 (CEST)
Hi all,
Look at the following class:
public MyClass
{
private Socket socket;
private Thread listener;
...
public MyClass(...)
{
socket = new Socket(...);
...
listener = new Thread(new ThreadStart(Listen));
listener.IsBackground = true;
listener.Start();
}
private void Listen()
{
int recv = 0;
byte[] data = null;
EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
while (true) {
if (socket.Poll(PollTimeOut, SelectMode.SelectRead)) {
data = new byte[socket.Available];
recv = socket.ReceiveFrom(
data,
0,
data.Length,
SocketFlags.None,
ref remoteEndPoint);
if (recv > 0) {
DoSomething();
}
}
}
}
public void Send(byte[] data, IPEndPoint remoteEndPoint)
{
socket.BeginSendTo(
data,
0,
data.Length,
SocketFlags.None,
remoteEndPoint,
new AsyncCallback(AsyncSend),
null);
}
private void AsyncSend(IAsyncResult asyncResult)
{
socket.EndSendTo(asyncResult);
}
}
As you can see, there is a thread that listens for
incoming datagrams, and an asynchronous Send method.
Now the question is: since the two threads work
on the same socket, could they interfere each other?
I guess they should work fine since sends and receives
use different socket buffers...
Any comment is appreciated!
Thanks,
Gius_.
----------------------------------------
Giuseppe Greco
::agamura::
phone: +41 (0)91 604 67 65
mobile: +41 (0)76 390 60 32
email: giuseppe.greco@agamura.com
web: www.agamura.com
----------------------------------------