2005-06-17 15:45:40 +02:00
|
|
|
/*
|
|
|
|
* Test name: test01.c
|
|
|
|
*
|
|
|
|
* Objective: The purpose of this test is to make sure that the timeout mechanisms
|
|
|
|
* work without errors.
|
|
|
|
*
|
|
|
|
* Description: Executes a select as if it was a sleep and compares the time it
|
|
|
|
* has been actually sleeping against the specified time in the select call.
|
|
|
|
* Three cases are tested: first, a timeout specified in seconds, second, a timeout in
|
|
|
|
* microseconds, and third, a timeout with more precision than seconds.
|
|
|
|
*
|
|
|
|
* Jose M. Gomez
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/select.h>
|
2005-06-20 01:13:57 +02:00
|
|
|
#include <sys/time.h>
|
2005-06-17 15:45:40 +02:00
|
|
|
#include <time.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <errno.h>
|
2005-06-20 01:13:57 +02:00
|
|
|
#include <string.h>
|
2005-06-17 15:45:40 +02:00
|
|
|
|
|
|
|
#define SECONDS 3
|
|
|
|
#define USECONDS 3000000L
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
int r;
|
|
|
|
time_t start, end; /* variables for timing */
|
|
|
|
struct timeval timeout; /* timeout structure */
|
|
|
|
|
|
|
|
/* Set timeout for 3 seconds */
|
|
|
|
timeout.tv_sec = SECONDS;
|
|
|
|
timeout.tv_usec = 0;
|
|
|
|
printf("Sleeping now for %d seconds...\n", SECONDS);
|
|
|
|
/* Record time before starting */
|
|
|
|
start = time(NULL);
|
|
|
|
r = select(0, NULL, NULL, NULL, &timeout);
|
|
|
|
printf("select return code: %d error: %s\n",
|
|
|
|
r, strerror(errno));
|
|
|
|
end = time(NULL);
|
|
|
|
printf("For a timeout with select of %d seconds, it took %d actual seconds\n",
|
|
|
|
SECONDS, end-start);
|
|
|
|
|
|
|
|
/* Set timeout for 3 seconds , but specified in microseconds */
|
|
|
|
|
|
|
|
timeout.tv_sec = 0;
|
|
|
|
timeout.tv_usec = USECONDS;
|
|
|
|
printf("\n***************************\n");
|
|
|
|
printf("Sleeping now for %ld microseconds...\n", USECONDS);
|
|
|
|
/* Record time before starting */
|
|
|
|
start = time(NULL);
|
|
|
|
r = select(0, NULL, NULL, NULL, &timeout);
|
|
|
|
printf("select return code: %d error: %s\n",
|
|
|
|
r, strerror(errno));
|
|
|
|
end = time(NULL);
|
|
|
|
printf("For a timeout with select of %ld useconds, it took %d actual seconds\n",
|
|
|
|
USECONDS, end-start);
|
|
|
|
|
|
|
|
/* Set timeout for 1.5 seconds, but specified in microseconds */
|
|
|
|
|
|
|
|
timeout.tv_sec = 0;
|
|
|
|
timeout.tv_usec = USECONDS/2;
|
|
|
|
printf("\n***************************\n");
|
|
|
|
printf("Sleeping now for %ld microseconds...\n", USECONDS/2);
|
|
|
|
/* Record time before starting */
|
|
|
|
start = time(NULL);
|
|
|
|
r = select(0, NULL, NULL, NULL, &timeout);
|
|
|
|
printf("select return code: %d error: %s\n",
|
|
|
|
r, strerror(errno));
|
|
|
|
end = time(NULL);
|
|
|
|
printf("For a timeout with select of %ld useconds, it took %d actual seconds\n",
|
|
|
|
USECONDS/2, end-start);
|
|
|
|
return 0;
|
|
|
|
}
|