In below codes,
After 10 seconds, function t() was called. So far everything is ok.
Then I want to awake blocked read(). So want to exit program.
In t(), how to do?
(in t(), close(sockfd) don't awake read());
#include <time.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void start (void);
void stop (void);
void t (union sigval sigval);
timer_t timer;
int main (void)
{
start ();
//
// socket, listen, bind, accept
//
read(sockfd, buf, 1024);
stop ();
return EXIT_SUCCESS;
}
void start ()
{
struct itimerspec itimer = { { 0 , 0 }, { 10, 0 } }; //
interval(sec, nanosec) value(sec, nanosec)
struct sigevent sigev;
memset (&sigev, 0, sizeof (struct sigevent));
sigev.sigev_value.sival_int = 1;
sigev.sigev_notify = SIGEV_THREAD;
sigev.sigev_notify_attributes = NULL;
sigev.sigev_notify_function = t;
if (timer_create (CLOCK_REALTIME, &sigev, &timer) < 0)
{
fprintf (stderr, "[%d]: %s\n", __LINE__, strerror (errno));
exit (errno);
}
if (timer_settime (timer, 0, &itimer, NULL) < 0)
{
fprintf (stderr, "[%d]: %s\n", __LINE__, strerror (errno));
exit (errno);
}
}
void stop (void)
{
if (timer_delete (timer) < 0)
{
fprintf (stderr, "[%d]: %s\n", __LINE__, strerror (errno));
exit (errno);
}
}
void t (union sigval sigval)
{
printf ("timer_nr=%02d pid=%d pthread_self=%ld\n",
sigval.sival_int, getpid (), pthread_self ());
// what code should I do write to awake bolcked read in main()?
}