I figured it out... Very strange solution; just a case of creating a function... Don't know why it works, but it works persistently.
Code:
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<string.h>
#define PORT 80
#define BUFFER_SIZE 500
int Open( char * ) ; // Its code is missing
void Read (int ); // Read Buffer Function
void getHTML ( int , char *); //getHTML command
main()
{
int cs ;
char frontpage[] = "GET / HTTP/1.1\r\nHost: news.bbc.co.uk\r\n\r\n";
char america[] = "GET /2/hi/americas/default.stm HTTP/1.1\r\nHost: news.bbc.co.uk\r\n\r\n";
cs = Open ("news.bbc.co.uk");
getHTML(cs,frontpage);
getHTML(cs,america);
close(cs);
}
void getHTML ( int cs, char *request)
{
int rc ;
char mess[BUFFER_SIZE];
rc = send( cs, request , strlen(request) , 0 ) ;
printf( "Sent %d\n%s\n" , rc , request ) ;
rc = recv( cs , &mess , sizeof mess , 0 ) ;
printf( "Received: %d\n" , rc ) ;
mess[rc] = '\0' ; // printf %s needs it
printf( "%s\n" , mess ) ;
Read(cs);
}
int Open( char *url )
{
int rc ;
int cs ;
struct sockaddr_in csSA, localAd;
struct hostent *h;
h = gethostbyname(url);
csSA.sin_family = h->h_addrtype;
memcpy((char *) &csSA.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
csSA.sin_port = htons(PORT);//(LOCAL_SERVER_PORT);
//
// csSA is filled right here. The code was deleted for your
// inconvenience; it contained references to htons() and gethostbyname().
//
cs = socket( PF_INET , SOCK_STREAM , 0 ) ; // 0 = TCP
localAd.sin_family = AF_INET;
localAd.sin_addr.s_addr = htonl(INADDR_ANY);
localAd.sin_port = htons(0);
rc = bind(cs, (struct sockaddr *) &localAd, sizeof(localAd));
if( cs == -1 ) {
printf( "Socket failed\n" ) ;
exit( -1 ) ;
}
if( connect( cs , (void *) &csSA , sizeof csSA ) == -1 ) {
printf( "Connect failed c\n" ) ;
exit( -1 ) ;
}
return cs ;
}
My read function was mess, mainly because I was required to parse....
Thanks for your help!