view echoServer/echoServer.c @ 0:536b29f11352

add some files
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Sat, 28 Apr 2012 21:01:53 +0900
parents
children
line wrap: on
line source

/*
 * http://blog.majide.com/2009/02/socket-programming-server/
 */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

#define PORT 8888
#define MAXDATA 2048

int main()
{
	struct sockaddr_in saddr;
	struct sockaddr_in caddr;
	
	int listen_fd;
	int conn_fd;
	
	int len = sizeof(struct sockaddr_in);

	int rsize;
	char buf[MAXDATA];
	
	if ((listen_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
		perror("socket");
		exit(EXIT_FAILURE);
	} 
	
	bzero((char *)&saddr, sizeof(saddr));

	saddr.sin_family = PF_INET;
	saddr.sin_addr.s_addr = INADDR_ANY;
	saddr.sin_port = htons(PORT);
	if (bind(listen_fd, (struct sockaddr *)&saddr, len) < 0) {
		perror("bind");
		exit(EXIT_FAILURE);
	}

	if (listen(listen_fd, SOMAXCONN) < 0) {
		perror("listen");
		exit(EXIT_FAILURE);
	}
	printf("Start Listening Port : %d", PORT);

	if ((conn_fd = accept(listen_fd, (struct sockaddr *)&caddr, &len)) < 0) {
		perror("accept");
		exit(EXIT_FAILURE);
	}
	printf("\nconn_fd = %d\n",conn_fd);
	close(listen_fd);
	do {
		rsize = recv(conn_fd, buf, MAXDATA, 0);
		if (rsize == 0) {
			break;
		} else if (rsize == -1) {
			perror("recv");
			exit(EXIT_FAILURE);
		} else {
			write(conn_fd, buf, rsize);
		}
	} while(1);
		
	if ( close(conn_fd) < 0) {
		perror("error");
		exit(EXIT_FAILURE);
	}
	
	printf("Connection close.\n");
	return 0;
}