【发布时间】:2011-11-17 10:14:00
【问题描述】:
我有一个客户端-服务器应用程序,在线程服务器上运行,它要求来自客户端的每个连接都创建一个新线程,客户端必须等待 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 秒时提供服务。
帮助:/
【问题讨论】:
-
使用信号比(大概)已经可以正常工作的东西有什么优势?
标签: c multithreading pthreads signals