Beispiel #1
0
int tcp_cli_nb(const char *host, const char *serv)
{
	int sock;
	struct sockaddr_storage sas;
        int flags;
	struct sockaddr_in *sin = (struct sockaddr_in *)&sas;

	if ( net_resolv(host, serv, "tcp", &sas) < 0 )
		return -1;

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

        flags = fcntl(sock, F_GETFL);
        if ( flags < 0 )
                return -3;

        flags |= O_NONBLOCK;

        if ( fcntl(sock, F_SETFL, flags) < 0 )
                return -4;

	if ( connect(sock, (SA *)sin, sizeof(*sin)) < 0 ) {
		close(sock);
		return -5;
	}

	return sock;
}
Beispiel #2
0
/*
 * This function is used to open a passive tcp socket.  It uses hostname and
 * service to declare explicity which address and port to bind to if specified.
 * The length of the address is returned in addrlen if addrlen != 0;  To wait
 * for a connection from here do an Accept()...
 */
int tcp_srv(const char *host, const char *serv)
{
	int sock, set = 1;
	struct sockaddr_storage sas;
	struct sockaddr_in *sin = (struct sockaddr_in *)&sas;

	if ( net_resolv(host, serv, "tcp", &sas) < 0 )
		return -1;
	/* now we have the address to use */
	if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
		return -2;
	if ( setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &set, sizeof(set))<0 ) {
		close(sock);
		return -3;
	}
	if ( bind(sock, (SA *)sin, sizeof(*sin)) < 0 ) {
		close(sock);
		return -4;
	}
	if ( listen(sock, CAT_LISTENQ) < 0 ) {
		close(sock);
		return -5;
	}

	return sock;
}
Beispiel #3
0
ssize_t 
udp_send (int socket,
	  const char *ip_str,
	  unsigned short int port,
	  const void *buf,
	  size_t len)
{
  struct sockaddr_in toaddr;
  ssize_t sendret;


  if (ip_str == NULL || buf == NULL)
    {
      return -1;
    }
	
  memset (&toaddr, 0, sizeof (struct sockaddr_in));

  if (net_resolv (ip_str, &toaddr.sin_addr))
    {
      error (0, 0, _("Invalid IP address given: %s"), strerror (errno));
      return -1;
    }

  toaddr.sin_family = AF_INET;
  toaddr.sin_port = htons (port);

  /* keep on sending and check for possible errors */
  sendret = sendto (socket, buf, len, 0, (struct sockaddr *) &toaddr,
		    sizeof (struct sockaddr_in));

  return sendret == -1 ? sendret : 0;
}
Beispiel #4
0
/*
 * This function opens a tcp connection to the address specified.  It is
 * not protocol independant.  You can start reading and writing
 * from here.
 */
int tcp_cli(const char *host, const char *serv)
{
	int sock;
	struct sockaddr_storage sas;
	struct sockaddr_in *sin = (struct sockaddr_in *)&sas;

	if ( net_resolv(host, serv, "tcp", &sas) < 0 )
		return -1;
	if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
		return -2;
	if ( connect(sock, (SA *)sin, sizeof(*sin)) < 0 ) {
		close(sock);
		return -3;
	}

	return sock;
}
Beispiel #5
0
/*
 * This opens a passive udp socket on the system.  The hostname and service
 * will specifiy the address and port if given.
 */
int udp_sock(char *host, char *serv)
{
	int sock, set = 1;
	struct sockaddr_storage sas;
	struct sockaddr_in *sin = (struct sockaddr_in *)&sas;

	if ( net_resolv(host, serv, "udp", &sas) < 0 )
		return -1;
	if ( (sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0 )
		return -2;
	if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &set, sizeof(set)) < 0) {
		close(sock);
		return -3;
	}
	if ( bind(sock, (SA *)sin, sizeof(*sin)) < 0 ) {
		close(sock);
		return -4;
	}

	return sock;
}
Beispiel #6
0
int
tcp_open (const char *ip_str,
	  unsigned int port)
{
  int sockfd;
  struct sockaddr_in toaddr;

  if (ip_str == NULL)
    {
      return -1;
    }
	
  memset (&toaddr, 0, sizeof (struct sockaddr_in));

  if (net_resolv (ip_str, &toaddr.sin_addr))
    {
      error (0, 0, _("Invalid IP address given: %s"), strerror (errno));
      return -1;
    }

  toaddr.sin_family = AF_INET;
  toaddr.sin_port = htons (port);

  sockfd = socket (PF_INET, SOCK_STREAM, 0);
  if (sockfd < 0)
    {
      perror ("socket() failed");
      return -1;
    }

  if (connect (sockfd, (const struct sockaddr *) &toaddr, sizeof (toaddr)))
    {
      error (0, 0, _("Couldn't connect to %s:%hu: %s"), ip_str, port, strerror (errno));
      close (sockfd);
      return -1;
    }

  return sockfd;
}