A CRY FOR HELP - Threading , Sockets, Asynchronous headaches
-
Greetings CP! Well - it appears I've been presented with a roadblock and cant seem to find the problem. Heres the situatio. Ive created an app that has to scann 16000+ servers - for now - all that has to be done is connect and send and receive once asynchronously. I am able to get the entire process down - the problem that occurs is that at random times the app just halts. It just stops connecting to the servers - no exceptions thrown - no nada. Its not a threading problem - unless its a bug in the threadpooling for asychronous socket communications. To draw out some broad strokes about the current scenario Classes MainForm applications main form ConnectionState stores connection information - buffer - socket - server hostname - start time / end time / elapsed time ConnectionManager this object is used in the main form (connection state is not accessed directly) - i start the process with a method called CheckServers() which is passed to a ThreadStart object in the main form for a Thread object named worker - the worker thread is started and is set to a background thread from the main form MessageEventHandler a delegate used to pass the messages from the buffer to controls on the main form I know this is a somewhat complicated issue to deal with over these forums.. but - i have traced every aspect of my code - 2-3 days spent in the debugger watching everything and still no luck. Any suggestions? Danny!
-
Greetings CP! Well - it appears I've been presented with a roadblock and cant seem to find the problem. Heres the situatio. Ive created an app that has to scann 16000+ servers - for now - all that has to be done is connect and send and receive once asynchronously. I am able to get the entire process down - the problem that occurs is that at random times the app just halts. It just stops connecting to the servers - no exceptions thrown - no nada. Its not a threading problem - unless its a bug in the threadpooling for asychronous socket communications. To draw out some broad strokes about the current scenario Classes MainForm applications main form ConnectionState stores connection information - buffer - socket - server hostname - start time / end time / elapsed time ConnectionManager this object is used in the main form (connection state is not accessed directly) - i start the process with a method called CheckServers() which is passed to a ThreadStart object in the main form for a Thread object named worker - the worker thread is started and is set to a background thread from the main form MessageEventHandler a delegate used to pass the messages from the buffer to controls on the main form I know this is a somewhat complicated issue to deal with over these forums.. but - i have traced every aspect of my code - 2-3 days spent in the debugger watching everything and still no luck. Any suggestions? Danny!
Are you setting off alarms at your ISP? They may not like you accessing so many machines. It could be taken as a worm or a vulnerability test in preparation for a new virus etc.
-
Are you setting off alarms at your ISP? They may not like you accessing so many machines. It could be taken as a worm or a vulnerability test in preparation for a new virus etc.
Hrmmm you know what - i didnt think about that.. Maybe I should put a delay between requests - like a random delay to see if that stops the problem.. Good idea! Anymore suggestions? Danny!
-
Greetings CP! Well - it appears I've been presented with a roadblock and cant seem to find the problem. Heres the situatio. Ive created an app that has to scann 16000+ servers - for now - all that has to be done is connect and send and receive once asynchronously. I am able to get the entire process down - the problem that occurs is that at random times the app just halts. It just stops connecting to the servers - no exceptions thrown - no nada. Its not a threading problem - unless its a bug in the threadpooling for asychronous socket communications. To draw out some broad strokes about the current scenario Classes MainForm applications main form ConnectionState stores connection information - buffer - socket - server hostname - start time / end time / elapsed time ConnectionManager this object is used in the main form (connection state is not accessed directly) - i start the process with a method called CheckServers() which is passed to a ThreadStart object in the main form for a Thread object named worker - the worker thread is started and is set to a background thread from the main form MessageEventHandler a delegate used to pass the messages from the buffer to controls on the main form I know this is a somewhat complicated issue to deal with over these forums.. but - i have traced every aspect of my code - 2-3 days spent in the debugger watching everything and still no luck. Any suggestions? Danny!
Some how I dont think the .NET threadpool is gonna cut that ;p Some other suggestions: - socket buffersizes and timeouts, by default they will wait for ever... - Linger options - Socket options (god knows what they all do....) top secret xacc-ide 0.0.1
-
Some how I dont think the .NET threadpool is gonna cut that ;p Some other suggestions: - socket buffersizes and timeouts, by default they will wait for ever... - Linger options - Socket options (god knows what they all do....) top secret xacc-ide 0.0.1
leppie wrote: Some how I dont think the .NET threadpool is gonna cut that Well instead of using thread pools manually im using them by means of asynchronous communication. to my understand - when communicating asynchronously with sockets (i.e. BeginConnect EndConnect etc etc ) these mechanisms use threadpooling in the background. Now it all depends on how you use these mechanism. For example - my first attempts maxed out the thread pools and i was only able to do 25 connections and blah - it got stuck there. I was able to by pass this with creating only 1 object that would do the main communication. Originally i had created an object which handled the entire connection including buffer / socket as well as the async parts. but for some nutty reason - this method did not prove to work - possible because garbage colleciton - although it was manually called - would not collect the lingering objects which were ready for collection.. leppie wrote: - socket buffersizes and timeouts, by default they will wait for ever... when it comes to this - during asynchronous communications the appropriate exceptions are thrown informing you of these. leppie wrote: - Linger options - Socket options (god knows what they all do....) well alas you have me at this one. right now im not using any socket options - since it seems to be working quite well without them.. ending comments... i took the first suggestion and implemented a random wait interval between each connection to each server. this proved to work perfectly - since that post the application has gone through 4000 servers and its still going - which is by far - further than its gone before. i simply put in a random interval between 1 and 30 seconds. although its a trade off for now - in time - the production system wont have these restrictions (i.e. flood control or worm detection whatever they call it ) Again thanks all for the advice and comments. Also - any more suggestions? p.s. a word on asynchronous sockets... ive test various methods of socket communication - async, sycn, manual thread pooling, custom threading... everything.. ive been able to achieve equal results if not better with the manual threading in comparison to asyhc mechanisms - but it was far trickier to achieve. has anyone implemented a server app - web server? ftp server? irc serveR? anything with async sockets in c#? just curious about your results..
-
Some how I dont think the .NET threadpool is gonna cut that ;p Some other suggestions: - socket buffersizes and timeouts, by default they will wait for ever... - Linger options - Socket options (god knows what they all do....) top secret xacc-ide 0.0.1
welp! it appears i spoke to soon - the app stopped working yet again - now its either my isp that keeps blocking or something else - i have resorted to fiddling with the socket options.. :D lets see if this works out.. Danny!
-
welp! it appears i spoke to soon - the app stopped working yet again - now its either my isp that keeps blocking or something else - i have resorted to fiddling with the socket options.. :D lets see if this works out.. Danny!
Danny Rodriguez wrote: now its either my isp that keeps blocking or something else Get a port sniffer/packet capture prog and see what happens! I suggest NGSniff + winpcap (only thing that didnt BSOD me). I have a funny feeling something is wrong in the Sockets in .NET, other problems, but if there's one, there bound to be more! I will look into those options and see what I can suggest. You definately want to turn lingering off. Have you tried another threadpool implemeatation perhaps? top secret xacc-ide 0.0.1
-
Some how I dont think the .NET threadpool is gonna cut that ;p Some other suggestions: - socket buffersizes and timeouts, by default they will wait for ever... - Linger options - Socket options (god knows what they all do....) top secret xacc-ide 0.0.1
Okay.. the ordeal continues.. I am still receiving the same problem.. Ive set sockets timeout via the SetSocketOptions but it appears to do nothing with asynchronous sockets. so then i moved onto another solution - which was to create a new thread which would wiat for a certain time period to elapse.. once it does it would manually kill the socket. unfornately this did nothing.. also - i contact the isp and the are not doing anything so that idea is out the door.. any suggestions.. the basic problem is setting a timeout on a socket which is being use in async communications.. any suggestion. im starting to get disperate :( Danny!