|
|
1.1 root 1: /* frsend.c - _frsend */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <frame.h>
6: #include <dlc.h>
7:
8: /*------------------------------------------------------------------------
9: * _frsend -- transmit one frame until receipt acknowledged
10: *------------------------------------------------------------------------
11: */
12: _frsend(fptr, fgptr)
13: struct frame *fptr;
14: struct fglob *fgptr;
15: {
16: int len;
17: int seq, nextseq;
18: int msg; /* response from receiver or timeout */
19: int msgcode; /* ack code without sequence number */
20:
21: len = getflen(fptr);
22: fgptr->fofails = 0;
23: fptr->frseq = seq = fgptr->foseq;
24: nextseq = seq >= FRMAXSEQ ? 0 : seq+1;
25: while ( TRUE ) {
26: recvclr();
27: write(fgptr->foutdev, fptr, len);
28:
29: /* schedule timeout message */
30:
31: fgptr->ftfuse = FRTIME;
32: fgptr->ftpid = getpid();
33: resume(fgptr->ftimproc);
34: if ( (msg=receive()) != FRTMSG) {
35: fgptr->ftfuse = -1;
36: switch (msg & FRCODE) {
37:
38: case FRACK:
39: if ( (msg&FRSEQ) == nextseq) {
40: fgptr->foseq = nextseq;
41: return;
42: }
43: break;
44:
45: case FRSACK:
46: fptr->frseq = fgptr->foseq = 0;
47: nextseq = 1;
48: sleep10(1);
49: }
50: }
51: sleep10(1);
52: }
53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.