#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#include <stdio.h>
#include <string.h>

#include "srvr_func.h"

int srvr_init(unsigned short port) {
  struct  sockaddr_in sad;   /* structure to hold an IP address     */
  int     sd;                /* socket descriptor                   */

  memset((char *)&sad,0,sizeof(sad));  /* clear sockaddr structure */
  sad.sin_family = AF_INET;            /* set family to Internet     */
  sad.sin_port = htons(port) ;
  sad.sin_addr.s_addr = INADDR_ANY ;

  /* Create a socket. */
  sd = socket(PF_INET, SOCK_STREAM, 0);
  if (sd < 0)
    return(-1) ;	/* extremely unlikely */

  /* Bind the socket to the appropriate port */
  if (bind(sd, (struct sockaddr *)&sad, sizeof(sad))) {
    perror("bind") ;
    return(-1) ;
  }

  if (listen(sd, SOMAXCONN))
    return(-1) ;

  return(sd) ;
}

int srvr_conn(int rsd) {
  int     csd;                  /* client connection socket            */
  struct  sockaddr_in clntad;   /* structure to hold client IP address */
  socklen_t clntadsize ;        /* size of client IP address           */
  clntadsize = sizeof(struct sockaddr_in) ;
  csd = accept(rsd, (struct sockaddr *)&clntad, &clntadsize) ;
  return(csd) ;
}
