All pastes #231715 Raw Edit

c_socket.cpp

public cpp v1 · immutable
#231715 ·published 2006-10-31 23:51 UTC
rendered paste body
/* c_socket's definition */#include "c_socket.h"/* constructor */c_socket::c_socket(){  #ifdef WIN32   WSADATA Data;  WSAStartup (MAKEWORD (2, 2), &Data);  #endif  m_sock = -1;  memset(&m_sin,0,sizeof(SOCKADDR_IN));  m_sockError.clear();}/* destructor */c_socket::~c_socket(){  if (m_sock > 0) {	::closesocket(m_sock);	m_sock = -1;	}  #ifdef WIN32  WSACleanup();  #endif  memset(&m_sin,0,sizeof(SOCKADDR_IN));  m_sockError.clear();}/* error's copy */void c_socket::setSockError(){  m_sockError = strerror(socketerror);}/* socket's initialization */bool c_socket::init(){  m_sin.sin_family = AF_INET;  m_sock = socket (AF_INET, SOCK_STREAM, 0);  if (m_sock < 0) {	setSockError();	return false;	}  else return true;}/* address's definition */bool c_socket::setAddress(char *address){  struct hostent *host_ip;  m_sin.sin_addr.s_addr = inet_addr(address);  if (m_sin.sin_addr.s_addr == -1) {	host_ip = gethostbyname (address);	if (host_ip == NULL) {		setSockError();		return false;		}	else {		memcpy ((char *) &m_sin.sin_addr.s_addr, host_ip->h_addr, host_ip->h_length);		return true;		}	}  return true;}/* port's definition */void c_socket::setPort(unsigned short int port){  m_sin.sin_port = htons(port);}bool c_socket::setPort(char *buffer){  unsigned short int port;  for (int i = 0; buffer[i] != 0; i++)	if (!isdigit (buffer[i])) {		m_sockError = "invalid port";		return false;		}  port = atoi (buffer);  m_sin.sin_port = htons (port);  return true;}/* connection */bool c_socket::connection(){  if (connect (m_sock, (sockaddr*)&m_sin, sizeof(SOCKADDR_IN)) < 0) {	setSockError();	return false;	}  return true;}/* for send */bool c_socket::send(string buffer){  int size;  if(size = ::send (m_sock, buffer.c_str(), buffer.length(), 0) < 0) {	setSockError();	return false;	}  else if(size < buffer.length()) {	setSockError();	return false;	}	  else return true;}/* for receive */bool c_socket::recv(){  fd_set rfds;  struct timeval tv;  int a;  FD_ZERO(&rfds);  FD_SET(m_sock, &rfds);  tv.tv_sec = 0;  tv.tv_usec = 0;  a = select(m_sock+1, &rfds, NULL, NULL, &tv);  if(a) {	m_size = ::recv(m_sock, recvBuffer, 2047, 0); //2047 + '\0'	if(m_size <= 0) {		setSockError();		return false;		}	else recvBuffer[m_size] = '\0';	}  return true;}/* for close ... */void c_socket::close(){  if (m_sock > 0) {	::closesocket(m_sock);	m_sock = -1;	}}string c_socket::getSockError(){  return m_sockError;}int c_socket::getSize(){  return m_size;}