text: // Recv.h,v 1.4 1999/02/01 00:19:30 schmidt Exp
  
  #ifndef RECV_H
  #define RECV_h
  
  #include "Protocol_Task.h"
  
  class ACE_SOCK_Stream;
  
  /* Get some data from the peer and send it upstream for
     de-protocol-ization.
  */
  class Recv : public Protocol_Task
  {
  public:
    typedef Protocol_Task inherited;
  
    // Give it someone to talk to...
    Recv (ACE_SOCK_Stream &peer);
    ~Recv (void);
  
    // Trigger a read from the socket
    int get (void);
  
    // In some cases it might be easier to check the "state" of the Recv
    // object than to rely on return codes filtering back to you.
    int error (void)
    {
      return this->error_;
    }
  
  protected:
  
    ACE_SOCK_Stream &peer (void)
    {
      return this->peer_;
    }
  
    // The baseclass will trigger this when our get() method is called.
    // A message block of the appropriate size is created, filled and
    // passed up the stream.
    int recv (ACE_Message_Block *message,
              ACE_Time_Value *timeout = 0);
  
  private:
    // Our endpoint
    ACE_SOCK_Stream &peer_;
  
    // get() uses a bogus message block to cause the baseclass to invoke
    // recv().  To avoid memory thrashing, we create that bogus message
    // once and reuse it for the life of Recv.
    ACE_Message_Block *tickler_;
  
    // Our error flag (duh)
    int error_;
  };
  
  #endif /* RECV_H */
  