Example #1
0
int main(int argc, const char *argv[])
{
	int listenfd, connfd;
	pid_t childpid;
	socklen_t clilen;
	struct sockaddr_in cliaddr, servaddr;
	listenfd = socket_r(AF_INET, SOCK_STREAM, 0);
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_addr.s_addr = htonl(argv[1]);
	servaddr.sin_port = htons(80);
	//void bind_r(int listening_socket, const struct sockaddr *addr, socklen_t addrlen, void *arg);
	bind_r(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr), (char *)argv[1]);
	//void listen_r(int sockfd, int backlog, void *arg);
	listen_r(listenfd, 10, (char *)argv[1]);
	for(;;){
		clilen = sizeof(cliaddr);
		//int accept_r(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
		connfd = accept_r(listenfd, (struct sockaddr *)&cliaddr, &clilen);	
		if((childpid = fork_r()) == 0){
			close_r(listenfd);
			str_echo(connfd);
			exit(0);
		}
	}
	close_r(connfd);
	return 0;
}
Example #2
0
void start_test(int role) {
	int sk, pid;
	int i = 0;

	DEBUG_PRINT(DEBUG_NONE, "\nStarting tests...\n");

	repeat_count = repeat;

	DEBUG_PRINT(DEBUG_MIN, "\tsocket(SOCK_STREAM, IPPROTO_SCTP)");

	if ((sk = socket(s_loc.ss_family, SOCK_STREAM, IPPROTO_SCTP)) < 0 ) {
		fprintf(stderr, "\n\n\t\t*** socket: failed to create"
			" socket:  %s ***\n", strerror(errno));
		exit(1);
	}
	DEBUG_PRINT(DEBUG_MIN, "  ->  sk=%d\n", sk);

	bind_r(sk, &s_loc);

	if (role == SERVER) {
		listen_r(sk, 1);
		accept_r(sk);
	} else {
		connect_r(sk, (struct sockaddr *)&s_rem, r_len);
	}

	if ((pid = fork()) == 0) {
		settimerhandle();
		printstatus(gsk);
		while(1);
	} else {
		if (!debug_level) {
			printf("     ");
		}

		for(i = 0; i < repeat_count; i++) {

			if (role == SERVER) {
				DEBUG_PRINT(DEBUG_NONE, "Server: Receiving packets.(%d/%d)\n",
					i+1, repeat_count);
				server(gsk);
			} else {
				DEBUG_PRINT(DEBUG_NONE, "Client: Sending packets.(%d/%d)\n",
					i+1, repeat_count);
				client(sk);
			}

			fflush(stdout);
		}

		if (role == SERVER) close_r(gsk);
		close_r(sk);
	}
} /* start_test() */
Example #3
0
void printstatus(int sk) {
	static int cwnd = 0;
	static int count = 0;
	struct sctp_status status;
	socklen_t optlen;
	FILE * fp;
	const char *state_to_str[] = {
		[SCTP_INACTIVE]		=	"INACTIVE",
		[SCTP_PF]		=	"PF",
		[SCTP_ACTIVE]		=	"ACTIVE",
		[SCTP_UNCONFIRMED]	=	"UNCONFIRMED",
	};

	optlen = sizeof(struct sctp_status);
	if(getsockopt(sk, IPPROTO_SCTP, SCTP_STATUS, &status, &optlen) < 0) {
		fprintf(stderr, "Error getting status: %s.\n", strerror(errno));
		exit(1);
	}

	if (statusfile != NULL) {
		if (count == 0)
			unlink(statusfile);

		if((fp = fopen(statusfile, "a+")) == NULL) {
			perror("fopen");
			exit(1);
		}
	} else
		fp = stdout;

	if (count == 0)
		fprintf(fp, "NO. ASSOC-ID STATE             RWND     UNACKDATA PENDDATA INSTRMS OUTSTRMS "
				"FRAG-POINT SPINFO-STATE SPINFO-CWDN SPINFO-SRTT SPINFO-RTO SPINFO-MTU\n");

	if (cwnd != status.sstat_primary.spinfo_cwnd) {
		count++;

		fprintf(fp, "%-3d %-8d %-17s %-8d %-9d %-8d %-7d %-8d %-10d %-12s %-11d %-11d %-10d %d\n", count,
				status.sstat_assoc_id, get_sstat_state(status.sstat_state),
				status.sstat_rwnd, status.sstat_unackdata, status.sstat_penddata,
				status.sstat_instrms, status.sstat_outstrms, status.sstat_fragmentation_point,
				state_to_str[status.sstat_primary.spinfo_state],
				status.sstat_primary.spinfo_cwnd, status.sstat_primary.spinfo_srtt,
				status.sstat_primary.spinfo_rto, status.sstat_primary.spinfo_mtu);
	}

	cwnd = status.sstat_primary.spinfo_cwnd;

	fflush(fp);

	if (fp != stdout)
		fclose(fp);

	if (status.sstat_primary.spinfo_state != SCTP_ACTIVE) {
		close_r(sk);
		exit(1);
	}
}
Example #4
0
void start_test(int role)
{
	int sk;
	int i = 0;
	
	DEBUG_PRINT(DEBUG_NONE, "\nStarting tests...\n");

	repeat_count = repeat;


	if (MIXED == role) {
		repeat_count = repeat_count * msg_cnt;  /* Repeat per assoc. */
		mixed_mode_test();
		return;
	}

	sk = socket_r();
	bind_r(sk, &s_loc);

	/* Do we need to do bindx() to add any additional addresses? */
	if (bindx_add_addrs)
		bindx_r(sk, bindx_add_addrs, bindx_add_count,
			   SCTP_BINDX_ADD_ADDR);

	if (role == SERVER) {
		listen_r(sk, 100);
	} else {
		if (socket_type == SOCK_STREAM && connectx_count == 0)
			connect_r(sk, (struct sockaddr *)&s_rem, r_len);

		if (connectx_count != 0)
			connectx_r(sk, connectx_addrs, connectx_count);
	}

	if (!debug_level) {
		printf("     ");
	}

	for(i = 0; i < repeat_count; i++) {
		
		if (role == SERVER) {
			DEBUG_PRINT(DEBUG_NONE,
				    "Server: Receiving packets.\n");
			server(sk);
		} else {
			DEBUG_PRINT(DEBUG_NONE,
				    "Client: Sending packets.(%d/%d)\n",
		    		    i+1, repeat_count);
			client(sk);
		}

		fflush(stdout);
	}

	close_r(sk);

} /* start_test() */
Example #5
0
void start_test(int role)
{
	int sk;
	int i = 0;
	
	DEBUG_PRINT(DEBUG_NONE, "\nStarting tests...\n");

	repeat_count = repeat;


	if (MIXED == role) {
		repeat_count = repeat_count * msg_cnt;  /* Repeat per assoc. */
		mixed_mode_test();
		return;
	}

	sk = socket_r();
	bind_r(sk, &s_loc);

	if (role == SERVER) {
		listen_r(sk, 100);
	}

	if (!debug_level) {
		printf("     ");
	}

	for(i = 0; i < repeat_count; i++) {
		
		if (role == SERVER) {
			DEBUG_PRINT(DEBUG_NONE,
				    "Server: Receiving packets.\n");
			server(sk);
		} else {
			DEBUG_PRINT(DEBUG_NONE,
				    "Client: Sending packets.(%d/%d)\n",
		    		    i+1, repeat_count);
			client(sk);
		}

		fflush(stdout);
	}

	close_r(sk);

} /* start_test() */
Example #6
0
int main(int argc, const char *argv[])
{
	struct sockaddr_in server_addr;
	char buf[MAXLINE];
	int n, sock_fd;

	if(argc != 2)
		err_sys("Usage ./server server_addr msg");
	//int socket_r(int domain, int type, int protocol);
	sock_fd = socket_r(AF_INET, SOCK_STREAM, 0);

	memset(&server_addr, 0, sizeof(server_addr));
	server_addr.sin_family = AF_INET;
	//int inet_pton(int af, const char *src, void *dst);
	inet_pton(AF_INET, argv[1], &server_addr.sin_addr);
	server_addr.sin_port = htons(SERVER_PORT);
	//void connect_r(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen, void *arg);
	connect_r(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr), (void *)argv[1]);
	//ssize_t write_r(int fd, const void *ptr, size_t nbytes);
	fprintf(stdout, "\n");
	while(fgets(buf, MAXLINE, stdin) != NULL){

		if(write_r(sock_fd, buf, strlen(buf)) == -1)
			err_ret("write_r error");
		//supplemention
		//ssize_t read_r(int fd, void *ptr, size_t nbytes);
		n = read(sock_fd, buf, MAXLINE);
		if(n == 0)
			fprintf(stdout, "peer side(%s port %d) has been closed.\n", argv[1], ntohs(server_addr.sin_port));
		else {

			fprintf(stdout, "responsed from server:\n");
			write_r(STDOUT_FILENO, buf, n);
			//fprintf(stdout, "\n");
		}
	}
	//void close_r(int fd);
	close_r(sock_fd);
	return 0;
}
Example #7
0
int main(int argc, const char *argv[])
{
	
	struct sockaddr_in server_addr, client_addr;
	socklen_t client_addr_len;
	int connection_sock, listen_sock;
	char buf[MAXLINE];
	char str[INET_ADDRSTRLEN];
	int i,n;
	char bindmsg[1024];

	int optval = 1;

	//struct sigaction {
	//void     (*sa_handler)(int);
	//void     (*sa_sigaction)(int, siginfo_t *, void *);
	//sigset_t   sa_mask;
	//int        sa_flags;
	//void     (*sa_restorer)(void);
	//};
	struct sigaction act, oact;

	//void *memcpy(void *dest, const void *src, size_t n);
	strcpy(bindmsg, argv[1]);
	strcat(bindmsg, " prot 8000");
	if(argc != 2)
		err_sys("Usage ./server server_addr");
	//int socket_r(int domain, int type, int protocol);
	listen_sock = socket(AF_INET, SOCK_STREAM, 0);

	//int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
	setsockopt_r(listen_sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));

	memset(&server_addr, 0, sizeof(server_addr));
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(SERVER_PORT);
	//int inet_pton(int af, const char *src, void *dst);
	inet_pton(AF_INET, argv[1], &server_addr.sin_addr);

	//void bind_r(int listening_socket, const struct sockaddr *addr, socklen_t addrlen, void *arg);
	bind_r(listen_sock, (struct sockaddr *)&server_addr, sizeof(server_addr), (void *)bindmsg);
	//void listen_r(int sockfd, int backlog, void *arg);
	listen_r(listen_sock, SERVER_BACKLOG, (void *)bindmsg);

	//int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact)

//siganl process
	act.sa_flags = 0;
	act.sa_handler = signal_handler;
	sigemptyset(&act.sa_mask);

	sigaction(SIGCHLD, &act, &oact);

	fprintf(stdout, "accepting connections ...\n");
	
	pid_t pid;
	while(1){
		client_addr_len = sizeof(client_addr);
		//int accept_r(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
		connection_sock = accept_r(listen_sock, (struct sockaddr *)&client_addr, &client_addr_len);
		if(connection_sock < 0){
			if(errno == EINTR)
				continue;
			err_ret("accept() failed");
		}

		pid = fork();
		if(pid < 0)
			err_sys("call to fork");
		else if(pid == 0){
			close_r(listen_sock);
		//ssize_t read_r(int fd, void *ptr, size_t nbytes);
			while(1){
				n = read_r(connection_sock, buf, MAXLINE);
				if(n == 0) {
					fprintf(stdout, "peer side(%s port %d) has been closed.\n", inet_ntop(AF_INET, &client_addr.sin_addr, str, sizeof(str)), ntohs(client_addr.sin_port));
					break;
				}

				fprintf(stdout, "reciveed from %s at port %d\n", inet_ntop(AF_INET, &client_addr.sin_addr, str, sizeof(str)), ntohs(client_addr.sin_port));
				for (i = 0; i < n; i++) 
				{
					buf[i] = toupper(buf[i]);
				}
				//ssize_t write_r(int fd, const void *ptr, size_t nbytes);
				write_r(connection_sock, buf, n);
			}
			close_r(connection_sock);	
			exit(0);
		} else {
			close_r(connection_sock);	
		}
			//void close_r(int fd);
			//close_r(connection_sock);
	}
	return 0;
}
void pipe_t::close()
{
    close_r();
    close_w();
}