#include "TCPSocket.h" TCPSocket::TCPSocket() { throw TCPSocketException("The constructor of the TCPSocket class require 2 parameters"); } TCPSocket::TCPSocket(char * adresse, int port) { FD_ZERO(&set); memset(&sin,0,sizeof(sockaddr_in)); timeout.tv_sec = 0; timeout.tv_usec = 0; struct hostent * host_ip; #ifdef WIN32 WSADATA Data; WSAStartup (MAKEWORD (2, 2), &Data); #endif sin.sin_family = AF_INET; sin.sin_port = htons(port); /* Creation de la socket */ sock = ::socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock < 0) { throw TCPSocketException("Error creating the socket"); } sin.sin_addr.s_addr = inet_addr(adresse); if(sin.sin_addr.s_addr == -1) { host_ip = gethostbyname(adresse); if(host_ip == NULL) { throw TCPSocketException("Error resolving domain name"); } else { memcpy(&sin.sin_addr.s_addr, host_ip->h_addr, host_ip->h_length); } } } TCPSocket::~TCPSocket() { if(sock > 0) close(sock); } bool TCPSocket::connect() { int n; n = ::connect(sock, (sockaddr *)&sin, sizeof(sockaddr_in)); if(n >= 0) { FD_ZERO(&set); FD_SET(sock, &set); return true; } else return false; } void TCPSocket::disconnect() { if(sock > 0) { FD_CLR(sock, &set); close(sock); } } bool TCPSocket::send(char * msg) { if(::send(sock,msg,strlen(msg), 0)>0) return true; else return false; } bool TCPSocket::readable() { fd_set temp_set = set; if(select(sock+1, &temp_set, 0, 0,&timeout) > 0) return true; else return false; } int TCPSocket::recv(char * buffer, int maxLength) { int taille = ::recv(sock, buffer, maxLength, 0); buffer[taille] = 0; return taille; }