📄 test-xnet.c
字号:
} 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 + -