/** Destroy a socket. @param Sock Pointer to the socket. **/ VOID SockDestroy ( IN OUT SOCKET *Sock ) { ASSERT (SockStream == Sock->Type); // // Flush the completion token buffered // by sock and rcv, snd buffer // if (!SOCK_IS_UNCONFIGURED (Sock)) { SockConnFlush (Sock); SockSetState (Sock, SO_CLOSED); Sock->ConfigureState = SO_UNCONFIGURED; } // // Destroy the RcvBuffer Queue and SendBuffer Queue // NetbufQueFree (Sock->RcvBuffer.DataQueue); NetbufQueFree (Sock->SndBuffer.DataQueue); // // Remove it from parent connection list if needed // if (Sock->Parent != NULL) { RemoveEntryList (&(Sock->ConnectionList)); (Sock->Parent->ConnCnt)--; DEBUG ( (EFI_D_NET, "SockDestroy: Delete a unaccepted socket from parent" "now conncnt is %d\n", Sock->Parent->ConnCnt) ); Sock->Parent = NULL; } FreePool (Sock); return ; }
/** Destroy a socket. @param Sock Pointer to the socket. **/ VOID SockDestroy ( IN OUT SOCKET *Sock ) { VOID *SockProtocol; EFI_GUID *ProtocolGuid; EFI_STATUS Status; ASSERT (SockStream == Sock->Type); if (Sock->DestroyCallback != NULL) { Sock->DestroyCallback (Sock, Sock->Context); } // // Flush the completion token buffered // by sock and rcv, snd buffer // if (!SOCK_IS_UNCONFIGURED (Sock)) { SockConnFlush (Sock); SockSetState (Sock, SO_CLOSED); Sock->ConfigureState = SO_UNCONFIGURED; } // // Destory the RcvBuffer Queue and SendBuffer Queue // NetbufQueFree (Sock->RcvBuffer.DataQueue); NetbufQueFree (Sock->SndBuffer.DataQueue); // // Remove it from parent connection list if needed // if (Sock->Parent != NULL) { RemoveEntryList (&(Sock->ConnectionList)); (Sock->Parent->ConnCnt)--; DEBUG ( (EFI_D_INFO, "SockDestory: Delete a unaccepted socket from parent" "now conncnt is %d\n", Sock->Parent->ConnCnt) ); Sock->Parent = NULL; } // // Set the protocol guid and driver binding handle // in the light of Sock->SockType // ProtocolGuid = &gEfiTcp4ProtocolGuid; // // Retrieve the protocol installed on this sock // Status = gBS->OpenProtocol ( Sock->SockHandle, ProtocolGuid, &SockProtocol, Sock->DriverBinding, Sock->SockHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL ); if (EFI_ERROR (Status)) { DEBUG ((EFI_D_ERROR, "SockDestroy: Open protocol installed " "on socket failed with %r\n", Status)); goto FreeSock; } // // Uninstall the protocol installed on this sock // in the light of Sock->SockType // gBS->UninstallMultipleProtocolInterfaces ( Sock->SockHandle, ProtocolGuid, SockProtocol, NULL ); FreeSock: FreePool (Sock); return ; }