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!!
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?
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.
#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
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I have tested this program NOW and it works fine! Sorry for the inconvenience! Thanx!
Phew ! No problem at all. Glad it helped!
Who have you sent this question?
What answer?
Which bugs?
Who am I?
Who was George Washington?
What am I doing here?
Reginaldo
stoned . . . . . . .