Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

EchoServer.cc

00001 /*
00002  * Copyright 2003 Michael A. Marsh, Cornell University. All rights reserved.
00003  * This software is released under the modified BSD license.
00004  * See the file LICENSE in the top-level directory for details.
00005  */
00006 //
00007 // $Id: EchoServer.cc,v 1.3 2004/05/19 15:56:55 mmarsh Exp $
00008 //
00009 // $Log: EchoServer.cc,v $
00010 // Revision 1.3  2004/05/19 15:56:55  mmarsh
00011 // *** empty log message ***
00012 //
00013 // Revision 1.2  2003/11/04 22:17:23  mmarsh
00014 // General code cleanup.
00015 //
00016 //
00017 
00018 #include <iostream>
00019 #include "EchoServer.h"
00020 #include "SocketBuilder.h"
00021 #include "Message.h"
00022 
00023 using namespace CODEX_Quorum;
00024 
00025 EchoServer::~EchoServer()
00026 {
00027 }
00028 
00029 
00030 void
00031 EchoServer::processRequest( SocketBase::StateType s )
00032 {
00033    SocketBase* skt;
00034    switch(s)
00035    {
00036       case SocketBase::kRead :
00037          skt = socket()->accept();
00038          while(1)
00039          {
00040             fd_set read_set;
00041             FD_ZERO(&read_set);
00042             int snum = skt->set_fd(&read_set, s);
00043             select(snum+1,&read_set,0,0,0);
00044             if ( skt->isset_fd( &read_set, s ) )
00045             {
00046                unsigned char buffer[1025];
00047                int n = skt->readFrom( buffer, 1024 );
00048                if ( 0 == n )
00049                {
00050                   cout << "closing connection" << endl;
00051                   delete skt; // closes connection
00052                   return;
00053                }
00054                // echo back to sender
00055                Message m(buffer,n);
00056                skt->writeTo( m );
00057                buffer[n] = '\0';
00058                // echo to terminal
00059                cout << buffer << flush;
00060             }
00061          }
00062          break;
00063       case SocketBase::kWrite :
00064          break;
00065       case SocketBase::kError :
00066          break;
00067    }
00068 }

Generated on Fri May 6 17:39:11 2005 for COrnell Data EXchange (CODEX) by  doxygen 1.4.1