I think we should split Manos into Manos.IO and Manos.Core. .IO would contain all the async IO stuff (files, sockets, watchers), while .Core would contain all of the rest. The split would not be much work, and after the split we could integrate the IO framework into other apps (eg to build a better benchmark tool than ab, that clearly doesn't need a full HTTP parser), not to mention the ability to hide implementation details (libev for example) from IO users. That missing abstraction made some of the latest bugs at all possible.
As already mentioned, the split can be done rather quickly. Moving all the IO parts into one assembly and all the current server stuff into another is no complex task.
I think we should split Manos into Manos.IO and Manos.Core. .IO would contain all the async IO stuff (files, sockets, watchers), while .Core would contain all of the rest. The split would not be much work, and after the split we could integrate the IO framework into other apps (eg to build a better benchmark tool than ab, that clearly doesn't need a full HTTP parser), not to mention the ability to hide implementation details (libev for example) from IO users. That missing abstraction made some of the latest bugs at all possible.
As already mentioned, the split can be done rather quickly. Moving all the IO parts into one assembly and all the current server stuff into another is no complex task.