/*
* Internet Socket Example
* -----------------------
*   Here is an example showing how to create and name a socket in the
* Internet namespace.  The newly created socket exists on the machine that
* the program is running on.  Rather than finding and using the machine's
* Internet address, this example specifies `INADDR_ANY' as the host
* address; the system replaces that with the machine's actual address.
*/

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

int make_socket (unsigned short int port)
{
   int sock;
   struct sockaddr_in name;

   /* Create the socket. */
   sock = socket (PF_INET, SOCK_STREAM, 0);
   if (sock < 0) {
       perror ("socket");
       exit (EXIT_FAILURE);
   }

   /* Give the socket a name. */
   name.sin_family = AF_INET;
   name.sin_port = htons (port);
   name.sin_addr.s_addr = htonl (INADDR_ANY);
   if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0) {
       perror ("bind");
       exit (EXIT_FAILURE);
   }

   return sock;
}


/*
* Here is another example, showing how you can fill in a `sockaddr_in'
* structure, given a host name string and a port number:
*/

void init_sockaddr (struct sockaddr_in *name, const char *hostname,
       unsigned short int port)
{
   struct hostent *hostinfo;

   name->sin_family = AF_INET;
   name->sin_port = htons (port);
   hostinfo = gethostbyname (hostname);
   if (hostinfo == NULL) {
       fprintf (stderr, "Unknown host %s.\n", hostname);
       exit (EXIT_FAILURE);
   }
   name->sin_addr = *(struct in_addr *) hostinfo->h_addr;
}