heartbeatcli.c

来自「关于linux 网络编程的一些代码 关于linux 网络编程的一些代码」· C语言 代码 · 共 51 行

C
51
字号
#include	"unp.h"static int		servfd;static int		nsec;			/* #seconds betweeen each alarm */static int		maxnprobes;		/* #probes w/no response before quit */static int		nprobes;		/* #probes since last server response */static void	sig_urg(int), sig_alrm(int);voidheartbeat_cli(int servfd_arg, int nsec_arg, int maxnprobes_arg){	servfd = servfd_arg;		/* set globals for signal handlers */	if ( (nsec = nsec_arg) < 1)		nsec = 1;	if ( (maxnprobes = maxnprobes_arg) < nsec)		maxnprobes = nsec;	nprobes = 0;	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");	}	nprobes = 0;			/* reset counter */	return;					/* may interrupt client code */}static voidsig_alrm(int signo){	if (++nprobes > maxnprobes) {		fprintf(stderr, "server is unreachable\n");		exit(0);	}	Send(servfd, "1", 1, MSG_OOB);	alarm(nsec);	return;					/* may interrupt client code */}

⌨️ 快捷键说明

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