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...
-
Unfortunately I've not secured a venue for the GGJ. With 9 days left, things are not looking hopeful. It could be that GGJ Perth will no...
-
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...
-
Often, when building a game, you need to test if objects are colliding. The objects could be spaceships, rocks, mouse pointers, laser beams....
-
I've just read a newspaper article (courtesy of Kranzky ) from WA Business News documenting the malfeasance, gross negligence and misc...
-
After my last post, I decided to benchmark the scaling properties of Stackless, Kamaelia, Fibra using the same hackysack algorithm. Left axi...
-
I made something which lets you render very large worlds with a small farClipPlane. https://github.com/simonwittber/scaled-origin The d...
-
If you're using DontDestroyOnLoad to preserve a game object across levels, you might find that you get duplicated instances of that obje...
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