I'm testing a network lib, which uses select for polling socket.
I'm running a stress test, which connects 100 sockets to a server socket (all in the same process), then echoes data back and forth as quickly as possible. If a socket dies, it gets removed. Each loop iteration I print time passed, and the number of active sockets left.
As it runs, I watch the number of sockets slowly decline, until I have a set of 15 sockets left, which seem to keep running happily. Why do the other 85 sockets die? They either raise ECONNRESET, EPIPE or ETIMEDOUT. I imagined sockets connected via localhost would be quite reliable...
Update: The same test between two different machines does _not_ show this same problem. So what's up with localhost?
Friday, November 23, 2007
Subscribe to:
Post Comments (Atom)
Popular Posts
-
These are the robots I've been working on for the last 12 months. They each weigh about 11 tonnes and have a 17 meter reach. The control...
-
This hard-to-see screenshot is a Generic Node Graph Editing framework I'm building. I'm hoping it can be used for any kind of node...
-
So, you've created a car prefab using WheelCollider components, and now you can apply a motorTorque to make the whole thing move along. ...
-
MiddleMan: A Pub/Sub and Request/Response server in Go. This is my first Go project. It is a rewrite of an existing Python server, based o...
-
Why would I ask that question? Python 3 has been available for some time now, yet uptake is slow. There aren't a whole lot of packages i...
-
It is about 8 degrees C this morning. So cold, especially when last week we had high twenties. To help solve the problem, a friend suggeste...
-
After my last post, I decided to benchmark the scaling properties of Stackless, Kamaelia, Fibra using the same hackysack algorithm. Left axi...
-
I'm now using bzr instead of svn. I'm pushing my repositories to: http://exactlysimilar.org/bzr/ I'm also auto publishing docume...
-
Possibly slightly more correct lighting. The rim light is now only applied in the direction of the sun, rather than being purely based on vi...
-
I've just read a newspaper article (courtesy of Kranzky ) from WA Business News documenting the malfeasance, gross negligence and misc...
6 comments:
What about the same test but between two different _processes_ on the same machine?
I get the same issue when running two different processes.
Maximum sustained socket count is 15-20 sockets.
Why, I don't know but I have observerd the same behavior. I suspected that when some queues are full, localhost network just drops the socket.
I imagine that the same would be possible for different machines, but with much more sockets. So: Catch those errors and retry, until the OS is happy. I imagine that that's what we were supposed to do anyway, and the kernel is based on that so it feels free to kill the sockets.
What os. Is it Operating system dependent? Have you tried it on more then one OS?
Could be bandwidth. If you can overload the listening sockets on localhost due to unlimited bandwidth, that could be a problem. Could be a real network actually hides the problem by limiting data transfer speeds?
Perhaps you are using an event loop which is timing out because the writer has filled the outgoing queue before the receiver can empty it?
Post a Comment