Ahhh! After 5 months of Stress, it's finished. I've been working with a sports-drink company developing an application to deal with their customers, orders and manufacturing.
Now, maybe I'll have some time to relax and code this ftp server. Got a few good books that I might read.
The ftp server has been on the side-lines for those 5 months and so now it needs to be audited and tested. I've run it with a few different clients. Opera, netscape, mozilla, internet explorer, windows explorer, and gftp. Out of all those, mozilla was a pain in the ass. Nothing extradionary but it's not particulary good at ftping. For instance, when opening a connection it calls out RETR /
What ftp client needs to download the root directory?! Obviously, that command fails and mozilla completes a login. Anyway, that's been the only glitch outside of having to rewrite some of the ls/dir/listing code.
I'm yet to really attack the server outside of normal high-connection stress testing. It hasn't been tested with perverted usage yet.
On my celeron 533/192MB box, I'm getting ~300 connections per second and that is with the benchmarking tool running at the same time. Which is around 25 million connections per day. Not too bad for something that I'm yet to really try to optimise.
Due to the poll implementation, it probably will only be able to handle 1000-3000 users concurrently. I've looked into io signal events in linux for handling the sockets but its quite poor. Because in a heavy loaded server, you have to fall back on poll to fix up the queue when it overruns.(This happens regularly)
You are trying to get away from poll() because of lack of scalability but under the current methods you have to use it when the machine's load is at its worst.