⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test-xnet.c

📁 OpenSS7 This the fourth public release of the OpenSS7 Master Package. See README in the release for
💻 C
📖 第 1 页 / 共 5 页
字号:
	}	return now();}static longmilliseconds_2nd(char *t){	if (verbose > 0) {		dummy = lockf(fileno(stdout), F_LOCK, 0);		fprintf(stdout, "                    .               :   :           .  .                    \n");		fprintf(stdout, "                    .               : %6s        .  .                    <%d>\n", t, state);		fprintf(stdout, "                    .               :   :           .  .                    \n");		fflush(stdout);		dummy = lockf(fileno(stdout), F_ULOCK, 0);	}	return now();}/* *  Check the current time against the beginning time provided as an argnument *  and see if the time inverval falls between the low and high values for the *  timer as specified by arguments.  Return SUCCESS if the interval is within *  the allowable range and FAILURE otherwise. */static intcheck_time(const char *t, long i, long lo, long hi){	float tol, dlo, dhi, itv;	itv = i * timer_scale;	dlo = lo;	dhi = hi;	tol = 100 * timer_scale;	itv = itv / 1000;	dlo = dlo / 1000;	dhi = dhi / 1000;	tol = tol / 1000;	if (verbose > 0) {		dummy = lockf(fileno(stdout), F_LOCK, 0);		fprintf(stdout, "                    |(%7.3g <= %7.3g <= %7.3g)|  | %6s             <%d>\n", dlo - tol, itv, dhi + tol, t, state);		fflush(stdout);		dummy = lockf(fileno(stdout), F_ULOCK, 0);	}	if (dlo - tol <= itv && itv <= dhi + tol)		return __RESULT_SUCCESS;	else		return __RESULT_FAILURE;}#endifstatic inttime_event(int child, int event){	static const char *msgs[] = {		"                    ! %11.6g                |                    <%d:%03d>\n",		"                    |                %11.6g !                    <%d:%03d>\n",		"                    |             %11.6g !  |                    <%d:%03d>\n",		"                    !        %11.6g         !                    <%d:%03d>\n",	};	if ((verbose > 4 && show) || (verbose > 5 && show_msg)) {		float t, m;		struct timeval now;		gettimeofday(&now, NULL);		if (!test_start)			test_start = now.tv_sec;		t = (now.tv_sec - test_start);		m = now.tv_usec;		m = m / 1000000;		t += m;		dummy = lockf(fileno(stdout), F_LOCK, 0);		fprintf(stdout, msgs[child], t, child, state);		fflush(stdout);		dummy = lockf(fileno(stdout), F_ULOCK, 0);	}	return (event);}static int timer_timeout = 0;static int last_signum = 0;static voidsignal_handler(int signum){	last_signum = signum;	if (signum == SIGALRM)		timer_timeout = 1;	return;}static intstart_signals(void){	sigset_t mask;	struct sigaction act;	act.sa_handler = signal_handler;//      act.sa_flags = SA_RESTART | SA_ONESHOT;	act.sa_flags = 0;	sigemptyset(&act.sa_mask);	if (sigaction(SIGALRM, &act, NULL))		return __RESULT_FAILURE;	if (sigaction(SIGPOLL, &act, NULL))		return __RESULT_FAILURE;	if (sigaction(SIGURG, &act, NULL))		return __RESULT_FAILURE;	if (sigaction(SIGPIPE, &act, NULL))		return __RESULT_FAILURE;	if (sigaction(SIGHUP, &act, NULL))		return __RESULT_FAILURE;	sigemptyset(&mask);	sigaddset(&mask, SIGALRM);	sigaddset(&mask, SIGPOLL);	sigaddset(&mask, SIGURG);	sigaddset(&mask, SIGPIPE);	sigaddset(&mask, SIGHUP);	sigprocmask(SIG_UNBLOCK, &mask, NULL);	siginterrupt(SIGALRM, 1);	siginterrupt(SIGPOLL, 1);	siginterrupt(SIGURG, 1);	siginterrupt(SIGPIPE, 1);	siginterrupt(SIGHUP, 1);	return __RESULT_SUCCESS;}/* *  Start an interval timer as the overall test timer. */static intstart_tt(long duration){	struct itimerval setting = {		{0, 0},		{duration / 1000, (duration % 1000) * 1000}	};	if (duration == (long) INFINITE_WAIT)		return __RESULT_SUCCESS;	if (start_signals())		return __RESULT_FAILURE;	if (setitimer(ITIMER_REAL, &setting, NULL))		return __RESULT_FAILURE;	timer_timeout = 0;	return __RESULT_SUCCESS;}#if 0static intstart_st(long duration){	long sdur = (duration + timer_scale - 1) / timer_scale;	return start_tt(sdur);}#endifstatic intstop_signals(void){	int result = __RESULT_SUCCESS;	sigset_t mask;	struct sigaction act;	act.sa_handler = SIG_DFL;	act.sa_flags = 0;	sigemptyset(&act.sa_mask);	if (sigaction(SIGALRM, &act, NULL))		result = __RESULT_FAILURE;	if (sigaction(SIGPOLL, &act, NULL))		result = __RESULT_FAILURE;	if (sigaction(SIGURG, &act, NULL))		result = __RESULT_FAILURE;	if (sigaction(SIGPIPE, &act, NULL))		result = __RESULT_FAILURE;	if (sigaction(SIGHUP, &act, NULL))		result = __RESULT_FAILURE;	sigemptyset(&mask);	sigaddset(&mask, SIGALRM);	sigaddset(&mask, SIGPOLL);	sigaddset(&mask, SIGURG);	sigaddset(&mask, SIGPIPE);	sigaddset(&mask, SIGHUP);	sigprocmask(SIG_BLOCK, &mask, NULL);	return (result);}static intstop_tt(void){	struct itimerval setting = { {0, 0}, {0, 0} };	int result = __RESULT_SUCCESS;	if (setitimer(ITIMER_REAL, &setting, NULL))		return __RESULT_FAILURE;	if (stop_signals() != __RESULT_SUCCESS)		result = __RESULT_FAILURE;	timer_timeout = 0;	return (result);}/* *  Addresses *//* *  Options *//* * data options */struct {	struct t_opthdr xti_hdr __attribute__ ((packed));	t_scalar_t xti_val __attribute__ ((packed));} opt_data = {	{	sizeof(struct t_opthdr) + sizeof(t_scalar_t), XTI_GENERIC, XTI_SNDBUF, T_SUCCESS}, 32767};/* * connect options */struct {	struct t_opthdr xti_hdr __attribute__ ((packed));	t_scalar_t xti_val __attribute__ ((packed));} opt_conn = {	{	sizeof(struct t_opthdr) + sizeof(t_scalar_t), XTI_GENERIC, XTI_SNDBUF, T_SUCCESS}, 32767};/* * management options */struct {	struct t_opthdr xti_hdr __attribute__ ((packed));	t_scalar_t xti_val __attribute__ ((packed));} opt_optm = {	{	sizeof(struct t_opthdr) + sizeof(t_scalar_t), XTI_GENERIC, XTI_SNDBUF, T_SUCCESS}, 32767};struct t_opthdr *find_option(int level, int name, const char *cmd_buf, size_t opt_ofs, size_t opt_len){	const char *opt_ptr = cmd_buf + opt_ofs;	struct t_opthdr *oh = NULL;	for (oh = _T_OPT_FIRSTHDR_OFS(opt_ptr, opt_len, 0); oh; oh = _T_OPT_NEXTHDR_OFS(opt_ptr, opt_len, oh, 0)) {		int len = oh->len - sizeof(*oh);		if (len < 0) {			oh = NULL;			break;		}		if (oh->level != level)			continue;		if (oh->name != name)			continue;		break;	}	return (oh);}/* *  ------------------------------------------------------------------------- * *  Printing things * *  ------------------------------------------------------------------------- */char *errno_string(t_scalar_t err){	switch (err) {	case 0:		return ("ok");	case EPERM:		return ("[EPERM]");	case ENOENT:		return ("[ENOENT]");	case ESRCH:		return ("[ESRCH]");	case EINTR:		return ("[EINTR]");	case EIO:		return ("[EIO]");	case ENXIO:		return ("[ENXIO]");	case E2BIG:		return ("[E2BIG]");	case ENOEXEC:		return ("[ENOEXEC]");	case EBADF:		return ("[EBADF]");	case ECHILD:		return ("[ECHILD]");	case EAGAIN:		return ("[EAGAIN]");	case ENOMEM:		return ("[ENOMEM]");	case EACCES:		return ("[EACCES]");	case EFAULT:		return ("[EFAULT]");	case ENOTBLK:		return ("[ENOTBLK]");	case EBUSY:		return ("[EBUSY]");	case EEXIST:		return ("[EEXIST]");	case EXDEV:		return ("[EXDEV]");	case ENODEV:		return ("[ENODEV]");	case ENOTDIR:		return ("[ENOTDIR]");	case EISDIR:		return ("[EISDIR]");	case EINVAL:		return ("[EINVAL]");	case ENFILE:		return ("[ENFILE]");	case EMFILE:		return ("[EMFILE]");	case ENOTTY:		return ("[ENOTTY]");	case ETXTBSY:		return ("[ETXTBSY]");	case EFBIG:		return ("[EFBIG]");	case ENOSPC:		return ("[ENOSPC]");	case ESPIPE:		return ("[ESPIPE]");	case EROFS:		return ("[EROFS]");	case EMLINK:		return ("[EMLINK]");	case EPIPE:		return ("[EPIPE]");	case EDOM:		return ("[EDOM]");	case ERANGE:		return ("[ERANGE]");	case EDEADLK:		return ("[EDEADLK]");	case ENAMETOOLONG:		return ("[ENAMETOOLONG]");	case ENOLCK:		return ("[ENOLCK]");	case ENOSYS:		return ("[ENOSYS]");	case ENOTEMPTY:		return ("[ENOTEMPTY]");	case ELOOP:		return ("[ELOOP]");	case ENOMSG:		return ("[ENOMSG]");	case EIDRM:		return ("[EIDRM]");	case ECHRNG:		return ("[ECHRNG]");	case EL2NSYNC:		return ("[EL2NSYNC]");	case EL3HLT:		return ("[EL3HLT]");	case EL3RST:		return ("[EL3RST]");	case ELNRNG:		return ("[ELNRNG]");	case EUNATCH:		return ("[EUNATCH]");	case ENOCSI:		return ("[ENOCSI]");	case EL2HLT:		return ("[EL2HLT]");	case EBADE:		return ("[EBADE]");	case EBADR:		return ("[EBADR]");	case EXFULL:		return ("[EXFULL]");	case ENOANO:		return ("[ENOANO]");	case EBADRQC:		return ("[EBADRQC]");	case EBADSLT:		return ("[EBADSLT]");	case EBFONT:		return ("[EBFONT]");	case ENOSTR:		return ("[ENOSTR]");	case ENODATA:		return ("[ENODATA]");	case ETIME:		return ("[ETIME]");	case ENOSR:		return ("[ENOSR]");	case ENONET:		return ("[ENONET]");	case ENOPKG:		return ("[ENOPKG]");	case EREMOTE:		return ("[EREMOTE]");	case ENOLINK:		return ("[ENOLINK]");	case EADV:		return ("[EADV]");	case ESRMNT:		return ("[ESRMNT]");	case ECOMM:		return ("[ECOMM]");	case EPROTO:		return ("[EPROTO]");	case EMULTIHOP:		return ("[EMULTIHOP]");	case EDOTDOT:		return ("[EDOTDOT]");	case EBADMSG:		return ("[EBADMSG]");	case EOVERFLOW:		return ("[EOVERFLOW]");	case ENOTUNIQ:		return ("[ENOTUNIQ]");	case EBADFD:		return ("[EBADFD]");	case EREMCHG:		return ("[EREMCHG]");	case ELIBACC:		return ("[ELIBACC]");	case ELIBBAD:		return ("[ELIBBAD]");	case ELIBSCN:		return ("[ELIBSCN]");	case ELIBMAX:		return ("[ELIBMAX]");	case ELIBEXEC:		return ("[ELIBEXEC]");	case EILSEQ:		return ("[EILSEQ]");	case ERESTART:		return ("[ERESTART]");	case ESTRPIPE:		return ("[ESTRPIPE]");	case EUSERS:		return ("[EUSERS]");	case ENOTSOCK:		return ("[ENOTSOCK]");	case EDESTADDRREQ:		return ("[EDESTADDRREQ]");	case EMSGSIZE:		return ("[EMSGSIZE]");	case EPROTOTYPE:		return ("[EPROTOTYPE]");	case ENOPROTOOPT:		return ("[ENOPROTOOPT]");	case EPROTONOSUPPORT:		return ("[EPROTONOSUPPORT]");	case ESOCKTNOSUPPORT:		return ("[ESOCKTNOSUPPORT]");	case EOPNOTSUPP:		return ("[EOPNOTSUPP]");	case EPFNOSUPPORT:		return ("[EPFNOSUPPORT]");	case EAFNOSUPPORT:		return ("[EAFNOSUPPORT]");	case EADDRINUSE:		return ("[EADDRINUSE]");	case EADDRNOTAVAIL:		return ("[EADDRNOTAVAIL]");	case ENETDOWN:		return ("[ENETDOWN]");	case ENETUNREACH:		return ("[ENETUNREACH]");	case ENETRESET:		return ("[ENETRESET]");	case ECONNABORTED:		return ("[ECONNABORTED]");	case ECONNRESET:		return ("[ECONNRESET]");	case ENOBUFS:		return ("[ENOBUFS]");	case EISCONN:		return ("[EISCONN]");	case ENOTCONN:		return ("[ENOTCONN]");	case ESHUTDOWN:		return ("[ESHUTDOWN]");	case ETOOMANYREFS:		return ("[ETOOMANYREFS]");	case ETIMEDOUT:		return ("[ETIMEDOUT]");	case ECONNREFUSED:		return ("[ECONNREFUSED]");	case EHOSTDOWN:		return ("[EHOSTDOWN]");	case EHOSTUNREACH:		return ("[EHOSTUNREACH]");	case EALREADY:		return ("[EALREADY]");	case EINPROGRESS:		return ("[EINPROGRESS]");	case ESTALE:		return ("[ESTALE]");	case EUCLEAN:		return ("[EUCLEAN]");	case ENOTNAM:		return ("[ENOTNAM]");	case ENAVAIL:		return ("[ENAVAIL]");	case EISNAM:		return ("[EISNAM]");	case EREMOTEIO:		return ("[EREMOTEIO]");	case EDQUOT:		return ("[EDQUOT]");	case ENOMEDIUM:		return ("[ENOMEDIUM]");	case EMEDIUMTYPE:		return ("[EMEDIUMTYPE]");	default:	{		static char buf[32];		snprintf(buf, sizeof(buf), "[%ld]", (long) err);

⌨️ 快捷键说明

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