int do_connect(const char *host, const char *serv) { int tfd, i; void *handle; struct t_call tcall; struct t_discon tdiscon; struct netconfig *ncp; struct nd_hostserv hs; struct nd_addrlist *alp; struct netbuf *np; handle = Setnetpath(); hs.h_host = (char *) host; hs.h_serv = (char *) serv; while ( (ncp = getnetpath(handle)) != NULL) { if (strcmp(ncp->nc_netid, "ticotsord") != 0) continue; if (netdir_getbyname(ncp, &hs, &alp) != 0) continue; /* try each server address */ for (i = 0, np = alp->n_addrs; i < alp->n_cnt; i++, np++) { printf("device = %s\n", ncp->nc_device); if ( (tfd = t_open(ncp->nc_device, O_RDWR, NULL)) < 0) err_xti("t_open error for %s", ncp->nc_device); if (t_bind(tfd, NULL, NULL) < 0) err_xti("t_bind error"); tcall.addr.len = np->len; tcall.addr.buf = np->buf; /* pointer copy */ printf("addr.len = %d\n", tcall.addr.len); printf("addr.buf = %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", tcall.addr.buf[0], tcall.addr.buf[1], tcall.addr.buf[2], tcall.addr.buf[3], tcall.addr.buf[4], tcall.addr.buf[5], tcall.addr.buf[6], tcall.addr.buf[7], tcall.addr.buf[8], tcall.addr.buf[9], tcall.addr.buf[10]); } netdir_free(alp, ND_ADDRLIST); } endnetpath(handle); return(-1); }
int main(int argc, char **argv) { int n, flags; char buff[NREAD+1]; /* +1 for null at end */ if (argc == 2) listenfd = Tcp_listen(NULL, argv[1], NULL); else if (argc == 3) listenfd = Tcp_listen(argv[1], argv[2], NULL); else err_quit("usage: tcprecv02 [ <host> ] <port#>"); connfd = Xti_accept(listenfd, NULL, NULL); Signal(SIGPOLL, sig_poll); Ioctl(connfd, I_SETSIG, S_RDNORM); for ( ; ; ) { flags = 0; if ( (n = t_rcv(connfd, buff, NREAD, &flags)) < 0) { if (t_errno == TLOOK) { if ( (n = T_look(connfd)) == T_ORDREL) { printf("received T_ORDREL\n"); exit(0); } else err_quit("unexpected event after t_rcv: %d", n); } err_xti("t_rcv error"); } buff[n] = 0; /* null terminate */ printf("read %d bytes: %s, flags = %s\n", n, buff, Xti_flags_str(flags)); } }
int main(int argc, char **argv) { int n, flags; char buff[NREAD+1]; /* +1 for null at end */ struct pollfd pollfd[1]; if (argc == 2) listenfd = Tcp_listen(NULL, argv[1], NULL); else if (argc == 3) listenfd = Tcp_listen(argv[1], argv[2], NULL); else err_quit("usage: tcprecv05 [ <host> ] <port#>"); connfd = Xti_accept(listenfd, NULL, NULL); sleep(5); pollfd[0].fd = connfd; pollfd[0].events = POLLIN; for ( ; ; ) { Poll(pollfd, 1, INFTIM); printf("revents = %x\n", pollfd[0].revents); if (pollfd[0].revents & POLLIN) { flags = 0; if ( (n = t_rcv(connfd, buff, NREAD, &flags)) < 0) { if (t_errno == TLOOK) { if ( (n = T_look(connfd)) == T_ORDREL) { printf("received T_ORDREL\n"); exit(0); } else err_quit("unexpected event after t_rcv: %d", n); } err_xti("t_rcv error"); } buff[n] = 0; /* null terminate */ printf("read %d bytes: %s, flags = %s\n", n, buff, Xti_flags_str(flags)); } } }
/* include qlen */ void do_parent(void) { int qlen, j, k, junk, fd[MAXBACKLOG + 1]; struct t_call tcall; Close(cfd); Signal(SIGALRM, parent_alrm); for (qlen = 0; qlen <= 14; qlen++) { printf("qlen = %d: ", qlen); Write(pfd, &qlen, sizeof(int)); /* tell child value */ Read(pfd, &junk, sizeof(int)); /* wait for child */ for (j = 0; j <= MAXBACKLOG; j++) { fd[j] = T_open(XTI_TCP, O_RDWR, NULL); T_bind(fd[j], NULL, NULL); tcall.addr.maxlen = sizeof(serv); tcall.addr.len = sizeof(serv); tcall.addr.buf = &serv; tcall.opt.len = 0; tcall.udata.len = 0; alarm(2); if (t_connect(fd[j], &tcall, NULL) < 0) { if (errno != EINTR) err_xti("t_connect error, j = %d", j); printf("timeout, %d connections completed\n", j-1); for (k = 1; k < j; k++) T_close(fd[k]); break; /* next value of qlen */ } alarm(0); } if (j > MAXBACKLOG) printf("%d connections?\n", MAXBACKLOG); } qlen = -1; /* tell child we're all done */ Write(pfd, &qlen, sizeof(int)); }
int main(int argc, char **argv) { int tfd, n, flags; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; struct t_call tcall; struct t_discon tdiscon; if (argc != 2) err_quit("usage: daytimecli01 <IPaddress>"); tfd = T_open(XTI_TCP, O_RDWR, NULL); T_bind(tfd, NULL, NULL); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(13); /* daytime server */ Inet_pton(AF_INET, argv[1], &servaddr.sin_addr); tcall.addr.maxlen = sizeof(servaddr); tcall.addr.len = sizeof(servaddr); tcall.addr.buf = &servaddr; tcall.opt.len = 0; /* no options with connect */ tcall.udata.len = 0; /* no user data with connect */ if (t_connect(tfd, &tcall, NULL) < 0) { if (t_errno == TLOOK) { if ( (n = T_look(tfd)) == T_DISCONNECT) { tdiscon.udata.maxlen = 0; T_rcvdis(tfd, &tdiscon); errno = tdiscon.reason; err_sys("t_connect error"); } else err_quit("unexpected event after t_connect: %d", n); } else err_xti("t_connect error"); } /* end daytimecli1 */ /* include daytimecli2 */ for ( ; ; ) { if ( (n = t_rcv(tfd, recvline, MAXLINE, &flags)) < 0) { if (t_errno == TLOOK) { if ( (n = T_look(tfd)) == T_ORDREL) { T_rcvrel(tfd); break; } else if (n == T_DISCONNECT) { tdiscon.udata.maxlen = 0; T_rcvdis(tfd, &tdiscon); errno = tdiscon.reason; /* probably ECONNRESET */ err_sys("server terminated prematurely"); } else err_quit("unexpected event after t_rcv: %d", n); } else err_xti("t_rcv error"); } recvline[n] = 0; /* null terminate */ fputs(recvline, stdout); } exit(0); }