mirror of https://github.com/A2osX/A2osX.git
Kernel 0.92 : TCP close fix
This commit is contained in:
parent
478a13a4be
commit
2b0f70dc74
Binary file not shown.
Binary file not shown.
|
@ -186,20 +186,17 @@ SKT.connect.STREAM
|
|||
SKT.connect.SEQPACKET
|
||||
jsr SKT.SetRemAddr
|
||||
jsr SKT.NewTCB
|
||||
bcs SKT.connect.99
|
||||
|
||||
bcs .99
|
||||
lda #S.TCP.OPTIONS.SYN
|
||||
jsr TCP.OUT.SendOptA Send SYN
|
||||
bcs .9
|
||||
|
||||
lda #S.SOCKET.TCP.S.SYNSENT
|
||||
sta SKT.Cache+S.SOCKET.TCP.S
|
||||
|
||||
jmp SKT.StoreTCB
|
||||
jmp SKT.StoreTCB.S
|
||||
|
||||
.9 lda #ERR.SKT.BAD
|
||||
sec
|
||||
SKT.connect.99 rts
|
||||
.99 rts
|
||||
*/--------------------------------------
|
||||
* # Listen
|
||||
* Listen for connections on a socket
|
||||
|
@ -354,22 +351,30 @@ SKT.shutdown.SEQPACKET
|
|||
rts
|
||||
SKT.shutdown.STREAM
|
||||
pla
|
||||
jsr SKT.GetTCB
|
||||
|
||||
ldy #S.SOCKET.TCP.S
|
||||
lda (ZPPtrSKT),y
|
||||
cmp #S.SOCKET.TCP.S.CLWAIT
|
||||
cmp #S.SOCKET.TCP.S.ESTBLSH
|
||||
bne .1
|
||||
|
||||
lda #S.SOCKET.TCP.S.LASTACK
|
||||
bra .2
|
||||
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
|
||||
jsr TCP.OUT.SendOptA
|
||||
bcs .9
|
||||
|
||||
.1 lda #S.SOCKET.TCP.S.FINWT1
|
||||
.2 sta (ZPPtrSKT),y
|
||||
lda #S.SOCKET.TCP.S.FINWT1
|
||||
jmp SKT.StoreTCB.S
|
||||
|
||||
.1 cmp #S.SOCKET.TCP.S.TIMEWT
|
||||
beq .8
|
||||
lda #S.TCP.OPTIONS.RST+S.TCP.OPTIONS.ACK
|
||||
jsr TCP.OUT.SendOptA
|
||||
bcs .9
|
||||
|
||||
ldy #S.SOCKET.TCP.O
|
||||
lda (ZPPtrSKT),y
|
||||
ora #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
|
||||
sta (ZPPtrSKT),y
|
||||
jmp TCP.OUT
|
||||
lda #S.SOCKET.TCP.S.TIMEWT
|
||||
jmp SKT.StoreTCB.S
|
||||
.8 clc
|
||||
.9 rts
|
||||
*/--------------------------------------
|
||||
* # Read (STREAM)
|
||||
* ## C
|
||||
|
@ -447,7 +452,8 @@ SKT.Write jsr SKT.PullhFDDataInPtrLen
|
|||
lda (ZPPtrSKT),y
|
||||
cmp #S.SOCKET.TCP.S.ESTBLSH
|
||||
bcc .90 Not yet established...no data
|
||||
|
||||
bne .91
|
||||
|
||||
jsr SKT.AddDataToSktOut will call SKT.GetTCB
|
||||
bcs .90
|
||||
|
||||
|
@ -1261,7 +1267,7 @@ SKT.AckDataToSktOut
|
|||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
SKT.NewTCB ldx #S.SOCKET
|
||||
SKT.NewTCB ldx #S.SOCKET.TCP.INTAIL
|
||||
|
||||
.1 stz SKT.Cache,x
|
||||
inx
|
||||
|
@ -1271,7 +1277,7 @@ SKT.NewTCB ldx #S.SOCKET
|
|||
>LDYAI K.TCP.WSIZE
|
||||
>STYA SKT.Cache+S.SOCKET.TCP.INFREE
|
||||
>SYSCALL getmem
|
||||
bcs SKT.StoreTCB.RTS
|
||||
bcs .9
|
||||
txa
|
||||
ldy #S.SOCKET.SQ.hInMem
|
||||
sta (ZPPtrSKT),y
|
||||
|
@ -1279,7 +1285,7 @@ SKT.NewTCB ldx #S.SOCKET
|
|||
>LDYAI K.TCP.WSIZE
|
||||
>STYA SKT.Cache+S.SOCKET.TCP.OUTFREE
|
||||
>SYSCALL getmem
|
||||
bcs SKT.StoreTCB.RTS
|
||||
bcs .9
|
||||
txa
|
||||
ldy #S.SOCKET.SQ.hOutMem
|
||||
sta (ZPPtrSKT),y
|
||||
|
@ -1290,18 +1296,22 @@ SKT.NewTCB ldx #S.SOCKET
|
|||
sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x
|
||||
dex
|
||||
bpl .2
|
||||
* clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
SKT.StoreTCB ldy #S.SOCKET
|
||||
SKT.StoreTCB.S ldy #S.SOCKET.TCP.S
|
||||
sta (ZPPtrSKT),y
|
||||
|
||||
SKT.StoreTCB ldy #S.SOCKET.TCP.INTAIL
|
||||
.1 lda SKT.Cache,y
|
||||
sta (ZPPtrSKT),y
|
||||
iny
|
||||
cpy #S.SOCKET.TCP
|
||||
bne .1
|
||||
clc
|
||||
SKT.StoreTCB.RTS
|
||||
rts
|
||||
*--------------------------------------
|
||||
SKT.GetTCB ldy #S.SOCKET
|
||||
SKT.GetTCB ldy #S.SOCKET.TCP.INTAIL
|
||||
.1 lda (ZPPtrSKT),y
|
||||
sta SKT.Cache,y
|
||||
iny
|
||||
|
|
|
@ -56,13 +56,23 @@ TCP.CLOSE ldx #0
|
|||
ldy #S.SOCKET.TCP.S
|
||||
lda (ZPTmpPtr1),y
|
||||
cmp #S.SOCKET.TCP.S.TIMEWT
|
||||
bcc .8
|
||||
bne .8
|
||||
|
||||
ldy #S.SOCKET.SQ.hInMem
|
||||
lda (ZPTmpPtr1),y
|
||||
>SYSCALL freemem
|
||||
ldy #S.SOCKET.SQ.hOutMem
|
||||
lda (ZPTmpPtr1),y
|
||||
>SYSCALL freemem
|
||||
|
||||
plx
|
||||
phx
|
||||
|
||||
lda SKT.TABLE,x
|
||||
jsr SKT.Shutdown
|
||||
>SYSCALL freemem
|
||||
|
||||
plx
|
||||
phx
|
||||
stz SKT.TABLE,x
|
||||
|
||||
.8 plx
|
||||
inx
|
||||
|
@ -105,8 +115,7 @@ TCP.IN.JMP.LISTEN
|
|||
bcs .9
|
||||
|
||||
lda #S.SOCKET.TCP.S.SYNRCVD
|
||||
sta SKT.Cache+S.SOCKET.TCP.S
|
||||
jmp SKT.StoreTCB
|
||||
jmp SKT.StoreTCB.S
|
||||
|
||||
.9 lda #ERR.SKT.OOS
|
||||
.99 rts
|
||||
|
@ -141,8 +150,7 @@ TCP.IN.JMP.SYNSENT
|
|||
bcs .9
|
||||
|
||||
lda #S.SOCKET.TCP.S.ESTBLSH
|
||||
sta SKT.Cache+S.SOCKET.TCP.S
|
||||
jmp SKT.StoreTCB
|
||||
jmp SKT.StoreTCB.S
|
||||
|
||||
.9 lda #S.TCP.OPTIONS.RST
|
||||
jsr TCP.OUT.SendOptA
|
||||
|
@ -175,8 +183,7 @@ TCP.IN.JMP.SYNRCVD
|
|||
bpl .1
|
||||
|
||||
lda #S.SOCKET.TCP.S.ESTBLSH
|
||||
sta SKT.Cache+S.SOCKET.TCP.S
|
||||
jmp SKT.StoreTCB
|
||||
jmp SKT.StoreTCB.S
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
|
@ -209,13 +216,12 @@ TCP.IN.JMP.ESTBLSH
|
|||
beq .8
|
||||
|
||||
jsr TCP.IN.ACKTheFIN
|
||||
|
||||
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
|
||||
jsr TCP.OUT.SendOptA FIN received, Send FIN.ACK
|
||||
bcs .9
|
||||
|
||||
ldy #S.SOCKET.TCP.S
|
||||
lda #S.SOCKET.TCP.S.CLWAIT
|
||||
sta (ZPPtrSKT),y
|
||||
jmp SKT.StoreTCB
|
||||
jmp SKT.StoreTCB.S
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
|
@ -230,30 +236,38 @@ TCP.IN.JMP.LASTACK
|
|||
bit #S.TCP.OPTIONS.ACK
|
||||
beq .8
|
||||
|
||||
ldx SKT.Index
|
||||
lda SKT.TABLE,x
|
||||
jmp SKT.shutdown
|
||||
ldy #S.SOCKET.TCP.S
|
||||
lda #S.SOCKET.TCP.S.TIMEWT
|
||||
sta (ZPPtrSKT),y
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
TCP.IN.JMP.FINWT1
|
||||
ldy #S.TCP.OPTIONS only accept ACK packet
|
||||
jsr SKT.GetTCB
|
||||
|
||||
ldy #S.TCP.OPTIONS FIN sent, accept ACK or FIN/ACK packet
|
||||
lda (ZPFrameInPtr),y
|
||||
bit #S.TCP.OPTIONS.FIN
|
||||
beq .8
|
||||
|
||||
ldy #S.SOCKET.TCP.O
|
||||
lda #S.TCP.OPTIONS.FIN send FIN
|
||||
sta (ZPPtrSKT),y
|
||||
jsr TCP.IN.ACKTheFIN
|
||||
bne .1
|
||||
|
||||
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
|
||||
jsr TCP.OUT.SendOptA Send FIN.ACK
|
||||
bcs .9
|
||||
|
||||
ldy #S.SOCKET.TCP.S
|
||||
|
||||
lda #S.SOCKET.TCP.S.FINWT2
|
||||
sta (ZPPtrSKT),y
|
||||
jmp SKT.StoreTCB.S
|
||||
|
||||
.1 jsr TCP.IN.ACKTheFIN FIN/ACK
|
||||
|
||||
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
|
||||
jsr TCP.OUT.SendOptA Send FIN.ACK
|
||||
bcs .9
|
||||
|
||||
lda #S.SOCKET.TCP.S.TIMEWT
|
||||
jmp SKT.StoreTCB.S
|
||||
|
||||
.8 clc
|
||||
* clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
TCP.IN.JMP.FINWT2
|
||||
|
@ -263,12 +277,15 @@ TCP.IN.JMP.FINWT2
|
|||
bit #S.TCP.OPTIONS.FIN
|
||||
beq .8
|
||||
|
||||
jsr SKT.GetTCB
|
||||
jsr TCP.IN.ACKTheFIN
|
||||
bcs .9
|
||||
|
||||
ldy #S.SOCKET.TCP.S
|
||||
lda #S.TCP.OPTIONS.ACK
|
||||
jsr TCP.OUT.SendOptA FIN received, Send ACK
|
||||
bcs .9
|
||||
|
||||
lda #S.SOCKET.TCP.S.TIMEWT
|
||||
sta (ZPPtrSKT),y
|
||||
jmp SKT.StoreTCB.S
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
|
@ -311,21 +328,27 @@ TCP.IN.ACKTheFIN
|
|||
ora #S.TCP.OPTIONS.ACK
|
||||
sta (ZPPtrSKT),y
|
||||
|
||||
jsr SKT.GetTCB
|
||||
|
||||
ldx #3
|
||||
ldy #S.TCP.ACKNUM+3
|
||||
|
||||
sec
|
||||
|
||||
.2 lda SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x
|
||||
adc #0
|
||||
sta SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x
|
||||
dex
|
||||
bpl .2
|
||||
|
||||
ldx #3
|
||||
|
||||
sec
|
||||
|
||||
.3 lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
|
||||
adc #0
|
||||
sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
|
||||
dey
|
||||
dex
|
||||
bpl .3
|
||||
|
||||
jmp TCP.OUT.I ACK the FIN
|
||||
rts
|
||||
*--------------------------------------
|
||||
TCP.IN.SetDataInPtrAndLen
|
||||
ldy #S.IP.TOTAL.LENGTH+1
|
||||
|
|
|
@ -446,6 +446,7 @@ CL.CheckCmd ldy #$ff
|
|||
lda (pPs),y
|
||||
>SYSCALL GetMemPtr
|
||||
jsr CL.SearchExt
|
||||
|
||||
bcs CL.CheckCmd.90
|
||||
|
||||
.6 >PUSHEA.G CMD.Stat
|
||||
|
|
|
@ -280,7 +280,7 @@ CS.RUN.BATCH >SYSCALL GetChar
|
|||
jsr CL.Trace
|
||||
*--------------------------------------
|
||||
CS.RUN.Exec jsr CL.Parse
|
||||
bcs CS.RUN.LOOP.8
|
||||
bcs CS.RUN.LOOP.END
|
||||
|
||||
lda (ZPArgVBuf)
|
||||
beq CS.RUN.LOOP.8
|
||||
|
|
Loading…
Reference in New Issue