/*
 * $Log: socket,v $
 * Revision 1.1.1.1  1997/12/29 14:37:55  jogu
 * WebGet Initial CMS Ver
 *
 */


#include <stdlib.h>
#include <string.h>

#include "netdb.h"
#include "netinet/in.h"
#include "sys/socket.h"
#include "sys/ioctl.h"
//#include "sys/byteorder.h"
#include "sys/errno.h"

#include "socket.h"

extern int close(int /*s*/);

int socket_getport(int normal, char *hostname)
{
  char *ptr;
  if (!hostname) return normal;

  ptr=strrchr(hostname,':');
  if (!ptr) return normal;

  /* *ptr=0; */
  return atoi(ptr+1);
}

int socket_connect(struct hostent *host, int port)
{
  struct sockaddr_in server;
  int sock, flag=1;

  sock = socket(AF_INET, SOCK_STREAM, 0);
  if ( sock < 0 ) return -1;

  if ( ioctl(sock, FIONBIO, &flag) == -1)
  {
    close(sock);
    return -2;
  }

  memset(&server, 0, sizeof(server));
  memcpy(&server.sin_addr, host->h_addr, host->h_length);
  server.sin_family = host->h_addrtype;
  server.sin_port = htons((u_short) port);

  if ((connect(sock, (struct sockaddr *) &server, sizeof(server)) != -1)
      || (errno != EINPROGRESS))
  {
    close(sock);
    return -3;
  }

  return sock;

/*  sprintf(tmp, "Connecting to %d.%d.%d.%d, port %d",
      hoste->h_addr[0], hoste->h_addr[1], hoste->h_addr[2], hoste->h_addr[3], sess->port); */
}
