All pastes #174061 Raw Edit

raiu

public cpp v1 · immutable
·published 2006-09-17 15:14 UTC
rendered paste body
#include "socket.h"/* constructeur */c_sock::c_sock(){  #ifdef WIN32   WSADATA Data;  WSAStartup (MAKEWORD (2, 2), &Data);  #endif  m_sock = -1;  memset(&m_sin,0,sizeof(SOCKADDR_IN));  m_sockerror[0] = '\0';}/* destructeur */c_sock::~c_sock(){  if (m_sock > 0) {	::closesocket(m_sock);	m_sock = -1;	}  #ifdef WIN32  WSACleanup();  #endif  memset(&m_sin,0,sizeof(SOCKADDR_IN));  m_sockerror[0] = '\0';}/* fonction qui copi les erreures */void c_sock::setsockerror(){  strcpy(m_sockerror, strerror(socketerror));}/* initialise la socket */bool c_sock::init(){  m_sin.sin_family = AF_INET;  m_sock = socket (AF_INET, SOCK_STREAM, 0); //0 ou IPPROTO_TCP  if (m_sock < 0) {	setsockerror();	return false;	}  else return true;}/* défini l'ip */bool c_sock::setadresse(char *buff){  struct hostent *host_ip;  m_sin.sin_addr.s_addr = inet_addr(buff);  if (m_sin.sin_addr.s_addr == -1) {	host_ip = gethostbyname (buff);	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;}/* défini le port */void c_sock::setport(unsigned short port){  m_sin.sin_port = htons(port);}/* défini le port */bool c_sock::setport(char *buffer){  unsigned short int port;  for (int i = 0; buffer[i] != 0; i++)      if (!isdigit (buffer[i]))      {        strcpy (m_sockerror, "invalide port");        return false;      }  port = atoi (buffer);  m_sin.sin_port = htons (port);  return true;}/* pour se connecter */bool c_sock::connexion(){  if (connect (m_sock, (sockaddr*)&m_sin, sizeof(SOCKADDR_IN)) < 0) {	setsockerror();	return false;	}  return true;}/* pour envoyer */bool c_sock::send(char *buff){  if (::send (m_sock, buff, strlen(buff), 0) < 0) {	setsockerror();	return false;	}  return true;}/* pour recevoir */bool c_sock::recv(char *buff, int len){  m_taille = ::recv(m_sock, buff, len, 0);	  if(m_taille <= 0) { //<= parce qu'en cas de déco du server, ca renvoi 0	setsockerror();	return false;	}  else {	buff[m_taille] = '\0';	return true;	}}/* pour fermer la socket */void c_sock::close(){  if (m_sock > 0) {	::closesocket(m_sock);	m_sock = -1;	}}/* renvoi m_error */char* c_sock::getsockerror(){  return m_sockerror;}/* retourne m_taille */int c_sock::gettaille(){  return m_taille;}