It seems, from your code, that you intend for there to be a ClientCallback object associated with every existing socket. So if there are n connections then there are n sockets and n callbacks. My question is, did you intend for there to be a 1:1 mapping of sockets to callbacks or did you intend for all sockets' messages to be forwarded to a single callback, which will distinguish the source by an identifier?
In the past I've fudged your code to make it so that there is a single callback to which all sockets forward their messages. Now that I'm working on a new project that will involve your package (once again, thanks yago), do you think it would be wise to make a ClientCallback object for every connection? Or would that be too heavy on the system?