[Mono-devel-list] XSP Listening Mechanism

Aaron Clauson aza_rc at yahoo.com
Mon Sep 20 06:03:17 EDT 2004


Hi,

I have been playing around a bit with XSP on Linux and
Windows. I have no problems on Linux. On Windows I
have no problems if I use the mono runtime. On Windows
I have a problem if I use the Microsoft runtime.

I tracked the problem down to an infinite loop in the
method that listens for incoming socket connections. I
fixed the problem but was just curious if anyone knows
why the mechanism below is employed in the RunServer
method of the ApplicationServer class:

while (!stop){
 w = wSockets.Count;
 Socket.Select (wSockets, null, null, (w == 1) ? -1 :
1000 * 1000); // 1s
 w = wSockets.Count;

 <snip/>

 wSockets.Clear ();
 if (allSockets.Count == 1) {
  wSockets.Add (listen_socket);
 } else {
  wSockets.AddRange (allSockets);
 }
}

I may be missing something but I can't see how
wSockets.Count will ever not equal 1 up until the
first connection is established. This means the CPU
jumps to 100% until a connection is established!

Is there any reason not to just do:

while (!stop){
 Socket clientSocket = listen_socket.Accept();
 SetSocketOptions(clientSocket);
 
 IWorker worker = webSource.CreateWorker(clientSocket,
this);
 ThreadPool.QueueUserWorkItem (new WaitCallback
(worker.Run));
}

Aaron


	
		
__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - 100MB free storage!
http://promotions.yahoo.com/new_mail 



More information about the Mono-devel-list mailing list