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;}