Monday, March 19, 2012

Linux: Simple Socket Server in C++

#define _REENTRANT
#include stdio.h
#include sys/types.h
#include sys/socket.h
#include netinet/in.h
#include string.h
#include sys/uio.h
#include unistd.h

/* the TCP port that is used for this example */
#define TCP_PORT 6000

main()
{
int sockfd, newsockfd, clilen;
struct sockaddr_in cli_addr, serv_addr;
//thread_t chld_thr;

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
fprintf(stderr,"server: can't open stream socket\n");
return 0;
}

memset((char *) &serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
//Use INADDR_ANY instead of IP here
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(TCP_PORT);
printf("This is Socket Server...\n");
printf("%c", serv_addr.sin_addr.s_addr);

if(bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
fprintf(stderr,"server: can't bind local address\n"); return 0;}

listen(sockfd, 5);

for(;;){
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, (socklen_t *)&clilen);

if(newsockfd < 0){
fprintf(stderr,"server: accept error\n"); return 0;}

printf("Connected to Client...\n");
/* the server is now free to accept another socket request */
}
return(0);
}

No comments: