socket programming linux



hi people,
I have written a list of C++ programs using the material given on
various websites to create a client server model. following is the
code of a module which is giving error during compilation.
The code is for the implementation of a socket class.

#include "Socket.h"
#include "string.h"
#include <string.h>
#include <errno.h>
#include <fcntl.h>


using namespace std;

Socket::Socket() :
m_sock ( -1 )
{

memset ( &m_addr,
0,
sizeof ( m_addr ) );

}

Socket::~Socket()
{
if ( is_valid() )
::close ( m_sock );
}

bool Socket::create()
{
m_sock = socket ( AF_INET,
SOCK_STREAM,
0 );

if ( ! is_valid() )
return false;


// TIME_WAIT - argh
int on = 1;
if ( setsockopt ( m_sock, SOL_SOCKET, SO_REUSEADDR, ( const char* )
&on, sizeof ( on ) ) == -1 )
return false;


return true;

}



bool Socket::bind ( const int port )
{

if ( ! is_valid() )
{
return false;
}



m_addr.sin_family = AF_INET;
m_addr.sin_addr.s_addr = INADDR_ANY;
m_addr.sin_port = htons ( port );

int bind_return = ::bind ( m_sock,
( struct sockaddr * ) &m_addr,
sizeof ( m_addr ) );


if ( bind_return == -1 )
{
return false;
}

return true;
}


bool Socket::listen() const
{
if ( ! is_valid() )
{
return false;
}

int listen_return = ::listen ( m_sock, MAXCONNECTIONS );


if ( listen_return == -1 )
{
return false;
}

return true;
}


bool Socket::accept ( Socket& new_socket ) const
{
int addr_length = sizeof ( m_addr );
new_socket.m_sock = ::accept ( m_sock, ( sockaddr * ) &m_addr,
( socklen_t * ) &addr_length );

if ( new_socket.m_sock <= 0 )
return false;
else
return true;
}


bool Socket::send ( const std::string s ) const
{
int status = ::send ( m_sock, s.c_str(), s.size(), MSG_NOSIGNAL );
if ( status == -1 )
{
return false;
}
else
{
return true;
}
}


int Socket::recv ( std::string& s ) const
{
using namespace std;
char buf [ MAXRECV + 1 ];

s = "";

memset ( buf, 0, MAXRECV + 1 );

int status = ::recv ( m_sock, buf, MAXRECV, 0 );

if ( status == -1 )
{
cout << "status == -1 errno == " << errno << " in Socket::recv
\n";
return 0;
}
else if ( status == 0 )
{
return 0;
}
else
{
s = buf;
return status;
}
}



bool Socket::connect ( const std::string host, const int port )
{
if ( ! is_valid() ) return false;

m_addr.sin_family = AF_INET;
m_addr.sin_port = htons ( port );

int status = inet_pton ( AF_INET, host.c_str(), &m_addr.sin_addr );

if ( errno == EAFNOSUPPORT ) return false;

status = ::connect ( m_sock, ( sockaddr * ) &m_addr, sizeof
( m_addr ) );

if ( status == 0 )
return true;
else
return false;
}

void Socket::set_non_blocking ( const bool b )
{

int opts;

opts = fcntl ( m_sock,
F_GETFL );

if ( opts < 0 )
{
return;
}

if ( b )
opts = ( opts | O_NONBLOCK );
else
opts = ( opts & ~O_NONBLOCK );

fcntl ( m_sock,
F_SETFL,opts );

}


error encountered while using g++ compiler:
in member function int socket::recv ( std::string& s ) const':
Socket.cc:134: 'cout' undeclared first use this function

kindly help me out. i think that there is an error because of the
compiler im using..

thanks
akshay
.



Relevant Pages

  • OT: Re: Perl Peeves
    ... I see the result of a test being used as an int. ... the compiler just assumed you knew what you were doing ... introduced to the language later, so void * was unheard of in most code. ... This didn't mean bool was special, declaring it just signaled to the ...
    (comp.lang.perl.misc)
  • Re: bool or BOOL in MFC projects
    ... Also, in the PDP-11 compiler, which was a real piece of trash, if you wrote ... learned it on the PDP-11 and never unlearned all the bad habits they developed. ... so every function implicity returned int. ... bool or BOOL in MFC projects ...
    (microsoft.public.vc.mfc)
  • Re: OT: Re: Perl Peeves
    ... when I see the result of a test being used as an int. ... compiler just assumed you knew what you were doing and would ... This didn't mean bool was special, declaring it just signaled to the ... What "normalization of bool results is built into the compiler"? ...
    (comp.lang.perl.misc)
  • Re: OT: Re: Perl Peeves
    ... even the concept of using the result of a boolean ... I see the result of a test being used as an int. ... compiler just assumed you knew what you were doing and would ... This didn't mean bool was special, declaring it just signaled to the ...
    (comp.lang.perl.misc)
  • is this MFC? + Book recommendations?
    ... import Bool MessageBeep ... import int RegisterWindowMessage ... import HWnd SetActiveWindow ... import DWord SetForegroundWindow ...
    (microsoft.public.vc.mfc)