У меня есть клиент-серверное приложение, работающее на многопоточном сервере, которое требует, чтобы каждое соединение от клиента создавало новый поток, клиент должен ждать x секунд, прежде чем будет обслужен, в настоящее время я использую неактивный вызов вначало каждой функции потока, чтобы это произошло, но я хотел бы использовать аварийные сигналы (SIGALARM), как бы я это назначил?
int main()
{
int sd,connfd,retbind;
struct sockaddr_in serveraddress,cliaddr;
socklen_t len;
pthread_t th1;
char buf[100];
sd = socket( AF_INET, SOCK_STREAM, 0 );
if( sd < 0 )
{
error_exit(SYSTEM_ERROR, "Socket");
}
memset( &serveraddress, 0, sizeof(serveraddress) );
serveraddress.sin_family = AF_INET;
serveraddress.sin_port = htons(MYPORT);
serveraddress.sin_addr.s_addr = htonl(INADDR_ANY);
retbind=bind(sd,(struct sockaddr*)&serveraddress,sizeof(serveraddress));
if(-1==retbind)
{
error_exit(SYSTEM_ERROR, "Bind failed");
}
listen(sd,5);
printf("-----------------------------------------\n");
printf("Server running on port number %d\n", MYPORT);
printf("------------------------------------------\n\n");
for(;;)
{
printf("Waiting for connection...\n");
len=sizeof(cliaddr);
connfd=accept(sd,(struct sockaddr*)&cliaddr,&len);
if (connfd < 0)
{
if (errno == EINTR)
printf("Interrupted system call ??");
else
error_exit(SYSTEM_ERROR, "Connection");
}
printf("Connection from %s\n",
inet_ntop(AF_INET,&cliaddr.sin_addr,buf,sizeof(buf)));
pthread_create(&th1,NULL,thread_func,(void*)connfd);
}
}
void* thread_func(void *connfd)
{
socket_ip buffer;
int pointer = 0, n;
pthread_detach(pthread_self());
sleep(30);
readWriteFile( (int)connfd, &buffer);
show_packet(&buffer);
close((int)connfd);
pthread_exit(NULL);
}
например, если клиентский запрос получен в 10 секунд, 20секунд и 25 секунд их следует подавать через 40 секунд, 50 секунд и 55 секунд.
Справка: /