Dart Home | PowerTCP Emulation for .NET | Custom Development | Reply | PowerTCP Emulation for .NET Topics | Forums |
Author | Forum: PowerTCP Emulation for .NET Topic: TelnetStream.Available not detecting data (v1.1.0) |
Geo From: Denver, CO USA Posts: 1 Member Since: 06/29/07 |
posted June 22, 2010 2:07 PM I have a section of code that looks at the .Available property before receiving data segments and has been working for several years. Recently we moved the application to new Win2008 64bit servers and I'm seeing some strange behavior. The .Available property remains at 0 for up to 45 seconds or more before the value changes to > 0. In contrast, when I run a telnet session manually to the same network device, data is received immediately. I send a command and the device immediately responds back. When I use my application, the delay is just as I stated above. There is a property of the NIC called "TCP Chimney Offload" which appears to be new to Windows 2008 in which "established TCP connections are handed off to the NIC for processing and the traffic bypasses any NDIS intermediate drivers (including WinPcap)" (source: http://www.answerspice.com/c118/1771189/not-seeing-all-traffic-with-wireshark-and-windows). Our new servers have this property enabled and seems to be a good thing in the overall scheme of things. More info about the TCP Chimney property here: http://support.microsoft.com/kb/951037 My question is, is this TCP Chimney property affecting how the .Available property is detecting network data? And whether it does or not, is there anything I can do to 'help it along', so to speak, in detecting network data that is clearly there? Any assistance would be greatly appreciated. Thanks, George Here's an example of the code section: // The setup is in constructor of class // Set up Telnet object, the connected object and a session buffer // ---------------------------------------------------- Session = new Telnet(); Session.NoDelay = false; // false is default but tried both Session.ReceiveTimeout = 15000; // Initial value for connection to hosts. This is changed for commands. Session.TerminalType = "vt220"; Session.ConnectedChangedEx += new Dart.PowerTCP.Telnet.EventHandlerEx(ConnectedChangedHandler); SessionBuffer = new StringBuilder(); // ---------------------------------------------------- // Shortened version of method but covers the important parts private string SendToNE(string command, string responsePattern) { // Initialize return value; string neResponse = string.Empty; try { // Submit the command. Session.Send(command); // Get response StringBuilder rawBuffer = new StringBuilder(); StringBuilder cleanBuffer = new StringBuilder(); WaitResponseTime = 15; // seconds for (int i = 0; i < WaitResponseTime; i++) { Thread.Sleep(1000 * i); // THE " * i" IS THE FIX FOR THE LONG DELAY ON NEW SERVERS if (Session.Available > 0) // VALUE COMMONLY STAYS AT 0 FOR 45 SECONDS OR MORE { Segment seg = Session.Receive(); rawBuffer.Append(seg.ToString()); cleanBuffer.Append(FilterSegment(seg)); // special method that 'cleans' the data stream of screen control characters if (Regex.IsMatch(cleanBuffer.ToString(), responsePattern)) { Match m = Regex.Match(cleanBuffer.ToString(), responsePattern); return m.ToString(); } // Reset the try count. We're looking for inactivity for the total number of WaitResponseTime seconds. i = -1; } } SessionBuffer.Append(rawBuffer.ToString()); } catch (SocketException ex) { neResponse = "SendToNE Socket Exception: " + ex.Message; } return neResponse; } |
Jason Farrar (Admin) From: Oneida, NY USA Posts: 223 Member Since: 07/24/07 Extra Support Options Custom Application Development |
posted July 7, 2010 3:53 PM I've not been able to actually confirm that the TCP Chimney setting is what is causing the problem as I do not have compatible hardware to test with but from the descriptions of what it does I would hazard the guess that it could be the cause. What happens if you simply remove the check to Available and attempt to read the stream? We'd like to determine whether the issue is that the data is actually not available or that the data is there but the reporting of it is delayed fro some reason. Do you happen to know if the problem is resolved if you disable the TCP Chimney? Also it seems that TCP Chimney has been around since Server 2003 but was an OOB option, and as I mentioned earlier requires compatible hardware to be used. ------ |
Reply | PowerTCP Emulation for .NET Topics | Forums |
This site is powered by PowerTCP WebServer for ActiveX |