mirror of
https://github.com/soypat/lneto.git
synced 2026-08-24 16:39:07 +00:00
fix timewait not counting as closed state in listen open; add second part to test
This commit is contained in:
+1
-1
@@ -148,7 +148,7 @@ type recvSpace struct {
|
|||||||
// To open an active connection use [ControlBlock.Send] with a segment generated with [ClientSynSegment].
|
// To open an active connection use [ControlBlock.Send] with a segment generated with [ClientSynSegment].
|
||||||
func (tcb *ControlBlock) Open(iss Value, wnd Size) (err error) {
|
func (tcb *ControlBlock) Open(iss Value, wnd Size) (err error) {
|
||||||
switch {
|
switch {
|
||||||
case tcb._state != StateClosed && tcb._state != StateListen:
|
case tcb._state != StateClosed && tcb._state != StateTimeWait:
|
||||||
err = errNeedClosedTCBToOpen
|
err = errNeedClosedTCBToOpen
|
||||||
case wnd > math.MaxUint16:
|
case wnd > math.MaxUint16:
|
||||||
err = errWindowTooLarge
|
err = errWindowTooLarge
|
||||||
|
|||||||
+24
-8
@@ -17,7 +17,7 @@ const (
|
|||||||
finack = tcp.FlagFIN | tcp.FlagACK
|
finack = tcp.FlagFIN | tcp.FlagACK
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestABC(t *testing.T) {
|
func TestStackAsyncTCP(t *testing.T) {
|
||||||
const seed = 1234
|
const seed = 1234
|
||||||
const MTU = 1500
|
const MTU = 1500
|
||||||
var mac = [6]byte{0x02, 0x00, 0x00, 0x00, 0x00, 0x01}
|
var mac = [6]byte{0x02, 0x00, 0x00, 0x00, 0x00, 0x01}
|
||||||
@@ -47,6 +47,8 @@ func TestABC(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
client.SetGateway6(sv.HardwareAddress())
|
||||||
|
sv.SetGateway6(client.HardwareAddress())
|
||||||
|
|
||||||
const svPort = 80
|
const svPort = 80
|
||||||
var svconn tcp.Conn
|
var svconn tcp.Conn
|
||||||
@@ -58,11 +60,6 @@ func TestABC(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
err = sv.ListenTCP(&svconn, svPort)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var clconn tcp.Conn
|
var clconn tcp.Conn
|
||||||
err = clconn.Configure(tcp.ConnConfig{
|
err = clconn.Configure(tcp.ConnConfig{
|
||||||
RxBuf: make([]byte, MTU),
|
RxBuf: make([]byte, MTU),
|
||||||
@@ -72,9 +69,12 @@ func TestABC(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
client.SetGateway6(sv.HardwareAddress())
|
|
||||||
sv.SetGateway6(client.HardwareAddress())
|
|
||||||
|
|
||||||
|
// Attach server and client connections to stacks.
|
||||||
|
err = sv.ListenTCP(&svconn, svPort)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
err = client.DialTCP(&clconn, 1337, netip.AddrPortFrom(sv.Addr(), svPort))
|
err = client.DialTCP(&clconn, 1337, netip.AddrPortFrom(sv.Addr(), svPort))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@@ -87,6 +87,22 @@ func TestABC(t *testing.T) {
|
|||||||
tst.TestTCPHandshake(&client, &sv)
|
tst.TestTCPHandshake(&client, &sv)
|
||||||
tst.TestTCPEstablishedSingleData(&client, &sv, &clconn, &svconn, sendData)
|
tst.TestTCPEstablishedSingleData(&client, &sv, &clconn, &svconn, sendData)
|
||||||
tst.TestTCPClose(&client, &sv, &clconn, &svconn)
|
tst.TestTCPClose(&client, &sv, &clconn, &svconn)
|
||||||
|
|
||||||
|
// Switch handles around, now server will be client and they will be registered to
|
||||||
|
// a different stack.
|
||||||
|
svconn, clconn = clconn, svconn
|
||||||
|
err = sv.ListenTCP(&svconn, svPort)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
err = client.DialTCP(&clconn, 1234, netip.AddrPortFrom(sv.Addr(), svPort))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
sendData = []byte("olleh")
|
||||||
|
tst.TestTCPHandshake(&client, &sv)
|
||||||
|
tst.TestTCPEstablishedSingleData(&client, &sv, &clconn, &svconn, sendData)
|
||||||
|
tst.TestTCPClose(&client, &sv, &clconn, &svconn)
|
||||||
}
|
}
|
||||||
|
|
||||||
type tester struct {
|
type tester struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user