62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Test name: speed.c
 | 
						|
 *
 | 
						|
 * Objetive:  Test the time it takes for select to run. 
 | 
						|
 * 
 | 
						|
 * Description: This tests creates a number of udp connections and performs 
 | 
						|
 * a select call waiting on them for reading with timeout of 0.
 | 
						|
 * This is done 10,000 thousands of times and then the average time it takes
 | 
						|
 * is computed
 | 
						|
 *
 | 
						|
 * Jose M. Gomez
 | 
						|
 */
 | 
						|
 | 
						|
#include <sys/types.h>
 | 
						|
#include <fcntl.h>
 | 
						|
#include <unistd.h>
 | 
						|
#include <sys/select.h>
 | 
						|
#include <sys/asynchio.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <limits.h>
 | 
						|
#include <net/netlib.h>
 | 
						|
#include <time.h>
 | 
						|
 | 
						|
#define NUMBER 12
 | 
						|
 | 
						|
int main(int argc, char *argv[])
 | 
						|
{
 | 
						|
	char *udp_device;
 | 
						|
	int fd[NUMBER];
 | 
						|
	fd_set fds_write;
 | 
						|
	struct timeval timeout;
 | 
						|
	time_t start_time, end_time;
 | 
						|
	int i;
 | 
						|
 | 
						|
	FD_ZERO(&fds_write);
 | 
						|
	for (i = 0; i < NUMBER; i++) {
 | 
						|
		fd[i] = open("/dev/tty", O_RDWR);
 | 
						|
		if (fd[i] < 0) {
 | 
						|
			fprintf(stderr, "Error opening tty %d\n", i); 
 | 
						|
			exit(-1);
 | 
						|
		}
 | 
						|
		FD_SET(fd[i], &fds_write);
 | 
						|
	}	
 | 
						|
 | 
						|
	printf("Select will send 1 msg to terminal and %d to inet: \n", NUMBER);
 | 
						|
	timeout.tv_sec = 0;
 | 
						|
	timeout.tv_usec = 0;
 | 
						|
	/* get initial time */
 | 
						|
	start_time = time(NULL);
 | 
						|
	for (i = 0; i < 32000; i++) {
 | 
						|
		select(NUMBER + 4, NULL, &fds_write, NULL, &timeout); 
 | 
						|
	}
 | 
						|
	/* get final time */
 | 
						|
	end_time = time(NULL);
 | 
						|
	printf("The select call took on average: %f\n", (float)(end_time - start_time) /  32000.0);
 | 
						|
	for (i = 0; i < NUMBER; i++) {
 | 
						|
		close(fd[i]);
 | 
						|
	}
 | 
						|
	return 0;
 | 
						|
}
 |