| plan 9 kernel history: overview | file list | diff list |
1991/1126/port/tcpif.c (diff list | history)
| 1991/1126/sys/src/9/port/tcpif.c:1,79 – 1991/12171/sys/src/9/port/tcpif.c:1,79 (short | long | prev | next) | ||
| 1991/0424 | #include "u.h" #include "lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "errno.h" #include "arp.h" #include "ipdat.h" extern int tcpdbg; #define DPRINT if(tcpdbg) print void state_upcall(Ipconv *s, char oldstate, char newstate) { Block *bp; int len; DPRINT("state_upcall: %s -> %s err %d\n", tcpstate[oldstate], tcpstate[newstate], s->err); if(oldstate == newstate) return; switch(newstate) { | |
| 1991/12171 | case Closed: | |
| 1991/0424 | s->psrc = 0; s->pdst = 0; s->dst = 0; | |
| 1991/1126 | /* NO break */ | |
| 1991/0424 |
| |
| 1991/12171 | case Close_wait: /* Remote closes */ | |
| 1991/0424 | if(s->readq == 0) break; | |
| 1991/1120 | ||
| 1991/0424 | if(s->err) { | |
| 1991/1120 | len = strlen(errstrtab[s->err]); | |
| 1991/0424 | bp = allocb(len); | |
| 1991/1120 | strcpy((char *)bp->wptr, errstrtab[s->err]); bp->wptr += len; | |
| 1991/0424 | } else bp = allocb(0); | |
| 1991/1120 | bp->flags |= S_DELIM; bp->type = M_HANGUP; PUTNEXT(s->readq, bp); break; | |
| 1991/0424 | } } void | |
| 1991/1014 | tcpstart(Ipconv *s, int mode, ushort window, char tos) | |
| 1991/0424 | { Tcpctl *tcb = &s->tcpctl; | |
| 1991/12171 | if(tcb->state != Closed) | |
| 1991/0424 | return; init_tcpctl(s); tcb->window = tcb->rcv.wnd = window; tcb->tos = tos; switch(mode){ case TCP_PASSIVE: tcb->flags |= CLONE; | |
| 1991/12171 | setstate(s, Listen); | |
| 1991/0424 | break; case TCP_ACTIVE: /* Send SYN, go into SYN_SENT state */ tcb->flags |= ACTIVE; qlock(tcb); send_syn(tcb); | |
| 1991/12171 | setstate(s, Syn_sent); | |
| 1991/0424 | tcp_output(s); qunlock(tcb); break; } } | |