In addition to the ACE C++ socket wrappers, the frameworks that you must use for this assignment are the ACE ACE_Reactor and ACE_Acceptor. The other hints are simply for your convenience. Graduate students are required to use the ACE_Connector on the client -- for ugrads this is optional.
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), which then processes 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.
Make sure that all resources you allocate in the program, including memory, socket, and files, are deallocated before your program exits to avoid leaks.