TDI Send Problem

Hi,
I have two TDI filter driver one acts as a server and another as client. The TDI server is just able to receive but failed to send. When I checked the output in IrpTracker I found this

Call 0x85581728-126 (UNKNOWN) \Device\Tcp CREATE
Comp 0x85581728-126 \Device\Tcp CREATE SUCCESS, Info = 0x0
Call 0x85581728-127 (UNKNOWN) \Device\Tcp CREATE
Comp 0x85581728-127 \Device\Tcp CREATE SUCCESS, Info = 0x0
Call 0x85581728-128 (UNKNOWN) \Device\Tcp INTERNAL_DEVICE_CONTROL
Comp 0x85581728-128 \Device\Tcp INTERNAL_DEVICE_CONTROL SUCCESS, Info = 0x0
CompRoutine 0x85581728-128 0x00000000 INTERNAL_DEVICE_CONTROL MORE_PROCESSING_REQUIRED
Call 0x855835E8-129 (UNKNOWN) \Device\Tcp INTERNAL_DEVICE_CONTROL 0x4
Comp 0x855835E8-129 \Device\Tcp INTERNAL_DEVICE_CONTROL 0x4 SUCCESS, Info = 0x0
CompRoutine 0x855835E8-129 0x00000000 INTERNAL_DEVICE_CONTROL 0x4 MORE_PROCESSING_REQUIRED
Call 0x855817C8-130 (UNKNOWN) \Device\Tcp INTERNAL_DEVICE_CONTROL 0x5
Comp 0x855817C8-130 \Device\Tcp INTERNAL_DEVICE_CONTROL 0x5 CONNECTION_INVALID, Info = 0x0
CompRoutine 0x855817C8-130 0x00000000 INTERNAL_DEVICE_CONTROL 0x5 MORE_PROCESSING_REQUIRED
Call 0x85583728-131 (UNKNOWN) \Device\Tcp INTERNAL_DEVICE_CONTROL 0x7
Comp 0x85583728-131 \Device\Tcp INTERNAL_DEVICE_CONTROL 0x7 CONNECTION_RESET, Info = 0x0
CompRoutine 0x85583728-131 0x00000000 INTERNAL_DEVICE_CONTROL 0x7 MORE_PROCESSING_REQUIRED
Call 0x85583728-132 (UNKNOWN) \Device\Tcp CLEANUP
Comp 0x85583728-132 \Device\Tcp CLEANUP SUCCESS, Info = 0x0
Call 0x85583728-133 (UNKNOWN) \Device\Tcp CLOSE
Comp 0x85583728-133 \Device\Tcp CLOSE SUCCESS, Info = 0x0
Call 0x85583728-134 (UNKNOWN) \Device\Tcp CLEANUP
Comp 0x85583728-134 \Device\Tcp CLEANUP SUCCESS, Info = 0x0
Call 0x85583728-135 (UNKNOWN) \Device\Tcp CLOSE
Comp 0x85583728-135 \Device\Tcp CLOSE SUCCESS, Info = 0x0
Call 0x8549BE70-136 (UNKNOWN) \Device\Tcp INTERNAL_DEVICE_CONTROL 0x6
Comp 0x8549BE70-136 \Device\Tcp INTERNAL_DEVICE_CONTROL 0x6 SUCCESS, Info = 0x0
CompRoutine 0x8549BE70-136 0x00000000 INTERNAL_DEVICE_CONTROL 0x6 MORE_PROCESSING_REQUIRED
Call 0x85583728-137 (UNKNOWN) \Device\Tcp CREATE
Comp 0x85583728-137 \Device\Tcp CREATE SUCCESS, Info = 0x0
Call 0x85583728-138 (UNKNOWN) \Device\Tcp INTERNAL_DEVICE_CONTROL
Comp 0x85583728-138 \Device\Tcp INTERNAL_DEVICE_CONTROL SUCCESS, Info = 0x0
CompRoutine 0x85583728-138 0x00000000 INTERNAL_DEVICE_CONTROL MORE_PROCESSING_REQUIRED
Call 0x85583728-139 (UNKNOWN) \Device\Tcp DEVICE_CONTROL
Comp 0x85583728-139 \Device\Tcp DEVICE_CONTROL SUCCESS, Info = 0x0
Call 0x85583728-140 (UNKNOWN) \Device\Tcp CLEANUP
Comp 0x85583728-140 \Device\Tcp CLEANUP SUCCESS, Info = 0x0
Call 0x85583728-141 (UNKNOWN) \Device\Tcp CLOSE
Comp 0x85583728-141 \Device\Tcp CLOSE SUCCESS, Info = 0x0
Call 0x85583728-142 (UNKNOWN) \Device\Tcp CLEANUP
Comp 0x85583728-142 \Device\Tcp CLEANUP SUCCESS, Info = 0x0
Call 0x85583728-143 (UNKNOWN) \Device\Tcp CLOSE
Comp 0x85583728-143 \Device\Tcp CLOSE SUCCESS, Info = 0x0

My TDI conect follows

KeInitializeEvent(&ConnectEvent, NotificationEvent, FALSE);

pIrp =
TdiBuildInternalDeviceControlIrp( TDI_CONNECT,
pTcpDevObj,
pConnFileObj,
&ConnectEvent,
&IoStatus
);

if(NULL==pIrp)
{
DbgPrint(“Could not get an IRP for TDI_CONNECT”);
return(STATUS_INSUFFICIENT_RESOURCES);
}
else
DbgPrint(“TdiBuildInternalDeviceControlIrp success”);

TimeOut.QuadPart = 10000000L;
TimeOut.QuadPart *= NumberOfSeconds;
TimeOut.QuadPart = -(TimeOut.QuadPart);

// Initialize the IP address structure
RemotePort = HTONS(6000);
RemoteAddr = INETADDR(10,6,21,20);

RmtIPAddr.TAAddressCount = 1;
RmtIPAddr.Address[0].AddressLength = TDI_ADDRESS_LENGTH_IP;
RmtIPAddr.Address[0].AddressType = TDI_ADDRESS_TYPE_IP;
RmtIPAddr.Address[0].Address[0].sin_port = RemotePort;
RmtIPAddr.Address[0].Address[0].in_addr = RemoteAddr;

RmtNode.UserDataLength = 0;
RmtNode.UserData = 0;
RmtNode.OptionsLength = 0;
RmtNode.Options = 0;

RmtNode.RemoteAddressLength = sizeof(RmtIPAddr);
RmtNode.RemoteAddress = &RmtIPAddr;

// add the IP connection data to the IRP
TdiBuildConnect( pIrp,
pTcpDevObj, // TDI driver’s device object.
pConnFileObj, // Connection (endpoint) file object.
NULL, // I/O completion routine.
NULL, // Context for I/O completion routine.
&TimeOut, // Address of timeout interval.
&RmtNode, // Remote-node client address.
0 // (Output) remote-node address.
);

ASSERT( KeGetCurrentIrql() == PASSIVE_LEVEL );

IoSetCompletionRoutine( pIrp, TDICompletionRoutine, &ConnectEvent, TRUE, TRUE, TRUE);

ASSERT( KeGetCurrentIrql() <= DISPATCH_LEVEL );

// Send the command to the underlying TDI driver
status = IoCallDriver(pTcpDevObj, pIrp);

if (status == STATUS_PENDING)
{
DbgPrint(“Waiting on IRP (connect)…”);
status = KeWaitForSingleObject(&ConnectEvent, Executive, KernelMode, FALSE, NULL); //UserMode
}

if (NT_SUCCESS(status))
DbgPrint(“connection success”);

What could be the reason ?