Tech Support > Microsoft Windows > Drivers > About NUmega KStreamSocket
About NUmega KStreamSocket
Posted by Jerry on July 1st, 2003


HI:
Everyone,
A Problem about KStreamSocket make me very bored.
It is So:
When i create a socket via KStreamSocket.
and connect to peer is ok,then send is ok.
and receive is ok once,But once receive is finished.
unfortunately,the socket is disconnect automatically.
So, I have to connect it to peer again.
Why,What is problem?
Can you help me?
Jerry


Posted by Jerry on July 2nd, 2003


HI;
Last time, I post a simple description about this problem.
Now i show out my code ,wish you can help me.
I have a very simple Socket class derive from KStreamSocket.
........................

void CMegaTDISocket::OnDisconnect(uint OptionsLength, PVOID Options, BOOLEAN
bAbort)
{
DbgPrint("I am away dsfsdfsdf!\n");


}

uint CMegaTDISocket::OnReceive(uint Indicated, uchar *Data,
uint Available, uchar **RcvBuffer, uint* RcvBufferLen)
{
UNREFERENCED_PARAMETERS3(Available, RcvBuffer, RcvBufferLen); // no need in
this simple proto
Data[Indicated]=0;
DbgPrint(" (%u bytes): %s\n", Indicated, (char*)Data);
return Indicated;
}

void CMegaTDISocket::On_connectComplete(PVOID, TDI_STATUS Status, uint)
{
// KeSetEvent((m_pLDI->peventforconnect),IO_NO_INCREMENT, FALSE);
DbgPrint("Connect is OK\n");
}

.......................


Now I create a CMegaTDISocket instance.and add to my device.


NTSTATUS
GpdAddDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject
){
................
deviceInfo->pMegaSocket = new CMegaTDISocket(deviceInfo);
if( deviceInfo->pMegaSocket && deviceInfo->pMegaSocket->IsCreated())
{
deviceInfo->pMegaSocket->SetEvents(TRUE);
DbgPrint("OK!");
T<<"Port At" <<deviceInfo->pMegaSocket->QueryPort()<<"EN";
}
else
{

IoDeleteSymbolicLink(win32DeviceName);
IoDeleteDevice(deviceObject);
return STATUS_INSUFFICIENT_RESOURCES;
}
TDI_ADDRESS_IP addr = {htons(80),MY_HTTP_SERVER};
CTDI_CONNECTION_INFORMATION server(addr);

if(deviceInfo->pMegaSocket&&deviceInfo->pMegaSocket->IsConnected())deviceInf
o->pMegaSocket->disconnect(TRUE);
if(deviceInfo->pMegaSocket&&(deviceInfo->pMegaSocket->IsCreated()))
TDI_STATUS status = deviceInfo->pMegaSocket->connect(server,
DAYTIME_QUERY_PERIOD*100);



...............
}
and in order to give a response to WriteFile,

DriverObject->MajorFunction[IRP_MJ_WRITE] = GpdWrite;


NTSTATUS
GpdWrite(
IN PDEVICE_OBJECT pDO,
IN PIRP pIrp
)

{ T << "ENTER GpdWrite\n";
LARGE_INTEGER timeout;
timeout.QuadPart = -10000000;
NTSTATUS Status = STATUS_UNSUCCESSFUL ;
//timeout.QuadPart=-3*10000000;
PLOCAL_DEVICE_INFO pLDI = (PLOCAL_DEVICE_INFO)pDO->DeviceExtension;

if(pLDI->pMegaSocket&&pLDI->pMegaSocket->IsConnected())
pLDI->pMegaSocket->send("Get \n\n",7,NULL);



IoCompleteRequest(pIrp, IO_NO_INCREMENT);
return Status;

}

"Jerry" <tghu@163.net> wrote in message
news:#uGxWb8PDHA.3192@TK2MSFTNGP10.phx.gbl...



Similar Posts