Listing 6: Example of a server treating user-defined classes in same manner as Listing 5

#include <sys/socket.h>
#include "Socket.h"

#include "Streamable.h"

class Message : public Streamable
{
public:
  void Marshall ( Socket& s ) const
  {
    s << MessageID
      << Option
      << Operation;
  }

  void UnMarshall ( Socket& s )
  {
    s >> MessageID
      >> Option
      >> Operation;
  }

  int MessageID;
  char Option;
  int Operation;
};

int main ()
{
  Message message;

  Socket s ( AF_INET, SOCK_STREAM, 0 );
  s.Bind ( 2112 );
  s.Listen ( 1 );

  for ( ;; )
  {
    Socket t = s.Accept ();

    t >> message;

    t.Close ();
  }

  return ( 1 );
}
— End of Listing —