PollInfo->Handles[j].Events = AFD_EVENT_RECEIVE |
AFD_EVENT_DISCONNECT |
AFD_EVENT_ABORT |
+ AFD_EVENT_CLOSE |
AFD_EVENT_ACCEPT;
}
}
if (lNetworkEvents & FD_CLOSE)
{
- AsyncData->AsyncSelectInfo.Handles[0].Events |= AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT;
+ AsyncData->AsyncSelectInfo.Handles[0].Events |= AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT | AFD_EVENT_CLOSE;
}
if (lNetworkEvents & FD_QOS)
}
if (lNetworkEvents & FD_CLOSE) {
- EventSelectInfo.Events |= AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT;
+ EventSelectInfo.Events |= AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT | AFD_EVENT_CLOSE;
}
if (lNetworkEvents & FD_QOS) {
}
if (EnumReq.PollEvents &
- (AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT)) {
+ (AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT | AFD_EVENT_CLOSE)) {
lpNetworkEvents->lNetworkEvents |= FD_CLOSE;
}
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
FCB->State = SOCKET_STATE_CLOSED;
+ FCB->PollState = AFD_EVENT_CLOSE;
+ PollReeval( FCB->DeviceExt, FCB->FileObject );
InFlightRequest[0] = &FCB->ListenIrp;
InFlightRequest[1] = &FCB->ReceiveIrp;
if( (PVOID)HandleArray[i].Handle == FileObject &&
(!OnlyExclusive || (OnlyExclusive && Poll->Exclusive)) ) {
ZeroEvents( PollReq->Handles, PollReq->HandleCount );
- SignalSocket( Poll, NULL, PollReq, STATUS_SUCCESS );
+ SignalSocket( Poll, NULL, PollReq, STATUS_CANCELLED );
}
}
}
FileObject = (PFILE_OBJECT)AFD_HANDLES(PollReq)[i].Handle;
FCB = FileObject->FsContext;
- if( (FCB->PollState & AFD_EVENT_CLOSE) ||
- (PollReq->Handles[i].Status & AFD_EVENT_CLOSE) ) {
- AFD_HANDLES(PollReq)[i].Handle = 0;
- PollReq->Handles[i].Events = 0;
- PollReq->Handles[i].Status = AFD_EVENT_CLOSE;
- Signalled++;
- } else {
- PollReq->Handles[i].Status =
- PollReq->Handles[i].Events & FCB->PollState;
- if( PollReq->Handles[i].Status ) {
- AFD_DbgPrint(MID_TRACE,("Signalling %x with %x\n",
+ PollReq->Handles[i].Status = PollReq->Handles[i].Events & FCB->PollState;
+ if( PollReq->Handles[i].Status ) {
+ AFD_DbgPrint(MID_TRACE,("Signalling %x with %x\n",
FCB, FCB->PollState));
- Signalled++;
- }
+ Signalled++;
}
}