In addition to the ACE C++ socket wrappers, the component that you must use for this assignment are the ACE ACE_Reactor and ACE_Acceptor. The other hints are simply for your convenience (in particular, only use the ACE_Connector on the client if you feel comfortable using it).
There are a number of ways to implement the open hook function (which we will discuss in class). One way is to turn the newly connected service handler into an active object (using the activate method inherited from ACE_Task), when then carries out the client request in the service handler's svc hook, which you must write. Another way is to use reactive I/O via the ACE_Reactor. There are hybrid schemes you can use, as well.
Regardless of which approach you use, make sure that your service handler is intelligent about not getting hung indefinitely on blocking send and recv calls. I recommend using synchronous and/or asynchronous timed I/O calls.
Some of you have already implemented the server using the ACE_Reactor and ACE_Acceptor. In this case, please extend your existing solutions in the following ways: