Link to home
Start Free TrialLog in
Avatar of boosta
boosta

asked on

unix networking programming

The answer you gave me to the question about a remote service written in c under unix does not run! It is full of bugs! Help me out!!
Avatar of rdelfino
rdelfino


Who have you sent this question?

What answer?

Which bugs?

Who am I?

Who was George Washington?

What am I doing here?

Reginaldo
stoned . . . . . . .
 
Avatar of Brian Utterback
Since you accepted the first answer, your question no longer
appears. I suggest that you repost the question and/or incorrect
answer so that someone else might be able to help you. For instance, I am having a little trouble understanding the question from you original text and the answer might help, or clarifying the question could help.  What do you mean by converting a username to an IP address?
 I wonder if you are referring to your earlier question where you asked for a sample service like daytime, which I answered by supplying the following program (reproduced here for the benefit of others who do not wish to have to 'pay' points to read the original question) -

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

extern int errno;

int TCPdaytime (const char* host, const char *service);
int errexit (const char *format, ...);
int connectTCP (const char *host, const char *service)

#define LINELEN 128

int main (int argc, char *argv [])
{
  char *host = "localhost";
  char *service = "daytime";

  switch (argc)
  {
    case 1:
      host = "localhost";
      break;

    case 3:
      service = argv [2];

    case 2:
      host = argv [1];
      break

    default:
      fprintf (stderr, "usage: TCPdaytime [host [port]]\n");
      exit (1);
  }

  TCPdaytime (host, service);
  exit (0);
}

TCPdaytime (const char *host, const char *service)
{
  char buf [LINELEN + 1];
  int s, n;

  s = connectTCP (host, service);

  while ( (n = read (s, buf, LINELEN)) > 0)
  {
    buf [n] = '\0';
    (void) fputs (buf, stdout);
  }
}

int errexit (const char *format, ...)
{
  va_list args;

  va_start (args, format);
  vfprintf (stderr, format, args);
  va_end (args);
  exit (1);
}

int connectTCP (const char *host, const char *service)
{
  struct hostent *phe;
  struct servent *pse;
  struct protoent *ppe;
  struct sockaddr_in sin;
  int s, type;

  memset (&sin, 0, sizeof (sin));
  sin.sin_family = AF_INET;

  if (pse = getservbyname (service, "tcp"))
    sin.sin_port = pse->s_port;
  else if ( (sin.sin_port = htons ((u_short) atoi (service))) == 0)
    errexit ("Can't get \"%s\" service entry.\n", service);

  if (phe = gethostbyname (host))
    memcpy (&sin.sin_addr, phe->h_addr, phe->h_length);
  else if ((sin.sin_addr.s_addr = inet_addr (host)) == INADDR_NONE)
    errexit ("Can't get \"%s\" host entry.\n", host);

  if ((ppe = getprotobyname ("tcp")) == 0)
    errexit ("Can't get \"tcp\" protocol entry.\n");

  type = SOCK_STREAM;

  s = socket (PF_INET, type, ppe->p_proto);
  if (s < 0)
    errexit ("Can't create socket: %s\n", strerror (errno));

  if (connect (s, (struct sockaddr *) &sin, sizeof (sin)) < 0)
    errexit ("Can't connect to %s.%s: %s\n", host, service, strerror (errno));

  return s;
}

  Now, you marked my answer as 'correct' on November 15th, and said "Thanx a lot. Its appropriate and accurate." (exact words).
  So, if you are unhappy with my answer, I'm surprised that you have changed your mind a month later, or you marked it as correct and 'accurate' without even running it.
  What version of Unix are you using?  What are the problems you are experiencing?  Please be more explicit.
 Perhaps more importantly, have you modified the program, since I provided it !!
ASKER CERTIFIED SOLUTION
Avatar of David Williams
David Williams
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of boosta

ASKER

I have tested this program NOW and it works fine! Sorry for the inconvenience! Thanx!
Phew !  No problem at all.  Glad it helped!