heartbeatserv.c

来自「unix网络编程第一卷socket编程书上的全部源代码」· C语言 代码 · 共 51 行

C
51
字号
#include	"unp.h"static int	servfd;static int	nsec;			/* #seconds between each alarm */static int	maxnalarms;		/* #alarms w/no client probe before quit */static int	nprobes;		/* #alarms since last client probe */static void	sig_urg(int), sig_alrm(int);voidheartbeat_serv(int servfd_arg, int nsec_arg, int maxnalarms_arg){	servfd = servfd_arg;		/* set globals for signal handlers */	if ( (nsec = nsec_arg) < 1)		nsec = 1;	if ( (maxnalarms = maxnalarms_arg) < nsec)		maxnalarms = nsec;	Signal(SIGURG, sig_urg);	Fcntl(servfd, F_SETOWN, getpid());	Signal(SIGALRM, sig_alrm);	alarm(nsec);}static voidsig_urg(int signo){	int		n;	char	c; 	if ( (n = recv(servfd, &c, 1, MSG_OOB)) < 0) {		if (errno != EWOULDBLOCK)			err_sys("recv error");	}	Send(servfd, &c, 1, MSG_OOB);	/* echo back out-of-band byte */	nprobes = 0;			/* reset counter */	return;					/* may interrupt server code */}static voidsig_alrm(int signo){	if (++nprobes > maxnalarms) {		printf("no probes from client\n");		exit(0);	}	alarm(nsec);	return;					/* may interrupt server code */}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?