Please do not reply to this email- if you want to comment on the bug, go to the URL shown below and enter your comments there.
Changed by [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=78683 --- shadow/78683 2006-06-21 13:40:42.000000000 -0400 +++ shadow/78683.tmp.7107 2006-06-21 13:40:42.000000000 -0400 @@ -0,0 +1,139 @@ +Bug#: 78683 +Product: Mono: Class Libraries +Version: 1.0 +OS: Red Hat 7.0 +OS Details: Actually CentOS 4x (Not sure which RH it's based on) +Status: NEW +Resolution: +Severity: +Priority: Wishlist +Component: System +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Cc: +Summary: TcpListener Class not starting with service application + +General: +When trying to implement the class TcpListener within a sevice +application, the calling method that creates and starts the TcpListerer +class is never called from the OnStart event of the service class. + +Detail: +In trying to track down the problem, I implemented a simple logging +function that appended a line to a log file. I then placed this function +in various points the in execution path of the application, specifically +the OnStart, OnStop events as well as within the StartServe() method +detailed below. + +So in the OnStart event, I would write a line to the log file such +as "OnStart Event Fired: + DateTime.Now.ToString();. + +Output was noted only in the OnStart and OnStop events depending on how I +created the IPAddress for the TcpListener to use. Not once does it +appear that the StartServe() method is ever called and thus no logging to +the log file to indicate it either. + +I am using Mono 1.1.15. + +The following code produces the problem taken from a service application: + +protected override void OnStart(string[] args) + { + try + { + this.StartServ(); + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + } + } + +private void StartServe() + { + TcpListener SockServer = null; + try + { + // Had placed here a logging function to see + // if execution got this far, but it did not so + // this method was never even called. + + // Setup socket server + Int32 port = 4567; + + // SETUP IP ADDRESS + // If this method is used (below), only the OnStart + // event is logged. + // Alternatively, if I createt the TcpListener with + // TcpListener(IpAddress.Any, port); both the OnStart and OnStop + // events are fired, but still the StartServe() method is never + // run. + IPAddress addr = IPAddress.Parse("127.0.0.1"); + SockServer = new TcpListener(addr, port); + SockServer.Start(); + + + // create buffer to read data + Byte[] bytes = new Byte[256]; + string data = null; + + while (true) + { + System.Threading.Thread.Sleep(1500); + // check to see if request is pending + if (SockServer.Pending()) + { + TcpClient client = SockServer.AcceptTcpClient(); + + data = null; + + NetworkStream stream = client.GetStream(); + + int i; + + // flag for loop + bool Alldone = false; + // End of Transmission character + char theChar = '\u0004'; + string ch = theChar.ToString(); + + while (!Alldone) + { + i = stream.Read(bytes, 0, bytes.Length); + // translate stream to string data; + data += System.Text.Encoding.ASCII.GetString(bytes); + if ((data.Contains(ch)) || (i == 0)) + Alldone = true; + } + + int POS = data.IndexOf(ch); + data = data.Substring(0, POS); + // strip off EOT character + + // CODE RUN WHEN REQUEST IS RECEIVED COMMENTED OUT + // create requestprocessing object here and hand off + + //RequestHandler handler = new RequestHandler(data); + //string response = handler.ProcessRequest() + ch; + + //// send back result + //byte[] ret = System.Text.Encoding.ASCII.GetBytes(response); + //stream.Write(ret, 0, ret.Length); + + + } + } + + } + catch (SocketException e) + { + Console.WriteLine(e.ToString()); + } + finally + { + SockServer.Stop(); + } + } _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
