#include "udpServerClass.h"

udpServerClass::udpServerClass(int port_number){

  /* create a socket */
  sockd = socket(AF_INET, SOCK_DGRAM, 0);
  printf("socket: %d\n", sockd);
  if (sockd == -1)
    {
      perror("Socket creation error");
      exit(1);
    }

  /* server address */
  my_name.sin_family = AF_INET;
  my_name.sin_addr.s_addr = INADDR_ANY;
  my_name.sin_port = htons(port_number);

  status = bind(sockd, (struct sockaddr*)&my_name, sizeof(my_name));
  printf("bind: %d\n", status);

  addrlen = sizeof(cli_name);

}


void udpServerClass::closeSocket(){
  close(sockd);
}

void udpServerClass::sendString(char* string){
  
  status = sendto(sockd, string, strlen(string)+1, 0, (struct sockaddr*)&cli_name, 
		  sizeof(cli_name));
  //  printf("sendto: %d\n", status);

}

int udpServerClass::recvString(char* string){

  status = recvfrom(sockd, string, MAX_BUF, 0, (struct sockaddr*)&cli_name, &addrlen);
  string[status] = '\n';
  //printf("recvfrom: %d\n", status);

  //  printf("%s\n", string);

  //  strcat(buf, " OK!");
  //cout << status << endl;
  return status;
}

void udpServerClass::setBlocking(int state){
  
  static int blockf, nonblockf;

  int flags;
 
  flags = fcntl(sockd, F_GETFL, 0);
  blockf = flags & FNDELAY; // on
  nonblockf = flags | FNDELAY; // off
  fcntl(sockd, F_SETFL, state ? blockf:nonblockf);

}


