hi.. i'm very new in this programming thing but i need to make this hello world program work in windows and linux environment. thing is i encoded the program below and i used cygwin and andlinux to compile and i still get i think some errors.

I'm lost.. really i need help.. if anyone can kindly point out to me what is wrong with this codes please explain to me as you will explain to a grade I pupil. thanks..

what am i doing wrong?? should i input some more codes like for examples in the part where this comment appeared?

/* turn off bind address checking, and allow port numbers to be reused otherwise the TIME_WAIT phenomenon will prevent binding to these address.port combinations for (2*MSL) seconds. */

pleasssseeeee...


here's what i've encoded:

#include <stdio.h>
#include <stdlib.h> /* exit() */
#include <string.h> /* memset (), memcpy()*/
#include <sys/utsname.h> /* uname()*/
#include <sys/types.h>
#include <sys/socket.h> /* socket(), bind(), listen(),accept()*/
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h> /* fork(), write(), close()*/

/* prototypes*/

int_GetHostName(char *buffer, int length);

/* contants*/

const char MESSAGE[] = "Hello, World!\n";
const int BACK_LOG=5;

int main(int argc, char *argv[]){
int serverSocket=0, on=0, port=0,status=0,childPid=0;
struct hostent *hostPtr=NULL;
char hostname[80]="";
struct sockaddr_in serverName={0};

if (2!=argc){
fprintf(stderr,"Usage: %s <port>\n",argv[0]);
}
port=atoi(argv[1]);
serverSocket=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(-1==serverSocket){
perror("socket()");
exit;
}

/* turn off bind address checking, and allow port numbers to be reused -
otherwise the TIME_WAIT phenomenon will prevent binding to these address.port
combinations for (2*MSL) seconds.
*/


on=1;
status=setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&on,sizeof(on));

if(-1==status){
perror("setsockopt(...,SO_REUSEADDR,...)");
}

/* when connection is closed, thereis a need to linger to ensure all data is transmitted,
so turn this on also
*/

{
struct linger linger={0};
linger.1_onoff=1;
linger.1_linger=30;
status=setsockopt(serverSocket,SOL_SOCKET,SO_LINGER,(const char*)&linger,sizeof(linger));
if(-1==status){
perror("setsockopt(...,SO_LINGER,...)");
}
}


// FIND OUT WHO I AM

status=_GetHostName(hostname,sizeof(hostname));
if(-1==status){
perror("_GetHostName()");
exit(1);
}

hostPtr=gethostbyname(hostname);
if(NULL==hostPtr){
perror("gethostbyname()");
exit(1);
}

(void)memset(&serverName,0,sizeof(serverName));
(void)memcpy(&serverName.sin_addr,hostPtr->h_addr,hostPtr->h_length);


/* to allow server be contactable on any of its IP addresses, uncomnment the following line of code


serverName.sin_addr=hton1(INADDR_ANY);

*/


serverName.sin_family=AF_INET;
serverName.sin_port=htons(port); //network order
status=bind(serverSocket,(structsockaddr*)&serverName,sizeof(serverName));
if(-1==status){
perror("bind()");
exit(1);
}

status=listen(serverSocket,BACK_LOG);
if(-1==status){
perror("listen()");
exit(1);
}

for(;{
struct sockaddr_in clientName={0};
int slaveSocket, clientLength=sizeof(clientName);

(void)memset(&clientName,0,sizeof(clientName));

slaveSocket=accept(serverSocket,(struct sockaddr*)&clientName,&clientLength);
if(-1==slaveSocket){
perror("accept()");
exit(1);
}

childPid=fork();

switch(childPid){

case -1: /* ERROR */
perror("fork()");
exit(1);
case 0: /* child process */
close(serverSocket);
if(-1==getpeername(slaveSocket,(struct sockaddr*)&clientName,&clientLength)){
perror("getpeername()");
}else{
printf("Connectionrequest from %s \n"; , inet_ntoa(clientName.sin_addr));
}


/* Server application spoecific code goes here,


e.g.perform some action, respond to client etc.

*/


write(slaveSocket,MESSAGE,strlen(MESSAGE));
close(slaveSocket);
exit(0);
default: /*parentprocess*/
close(slaveSocket);
}
}

return 0;

}

/* Local replacement of gethostname() to aid portability */


int _GetHostName(char *buffer, int length){
struct utsname sysname={0};
int status=0;

status=uname(&sysname);
if(-1!=status){
strncpy(buffer,sysname.nodename,length);
}
return(status);
}

Recommended Answers

All 2 Replies

Would you mind posting your error's,
Apart from that with one quick glance i noticed that

int_GetHostName(char *buffer, int length);

At Line number ::14 doesn't have a space in between.So the compiler considers that that declaration is invalid as there is no returntype mentioned :)

Edited::
Lol!! encoding!= coding ;)
End of Edit::

Would you mind posting your error's,
Apart from that with one quick glance i noticed that

int_GetHostName(char *buffer, int length);

At Line number ::14 doesn't have a space in between.So the compiler considers that that declaration is invalid as there is no returntype mentioned :)

Edited::
Lol!! encoding!= coding ;)
End of Edit::

hello.. thanks a lot for helping here are my errors i got about 15 and now i'm down to i think 8..
hope you enlighten me.. thanks again..

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.