+ if (Sock->IpVersion == IP_VERSION_4) {\r
+ IpProtocolGuid = &gEfiIp4ProtocolGuid;\r
+ TcpProtocolGuid = &gEfiTcp4ProtocolGuid;\r
+ } else {\r
+ IpProtocolGuid = &gEfiIp6ProtocolGuid;\r
+ TcpProtocolGuid = &gEfiTcp6ProtocolGuid;\r
+ }\r
+ ProtoData = (TCP_PROTO_DATA *) Sock->ProtoReserved;\r
+ Tcb = ProtoData->TcpPcb;\r
+\r
+ ASSERT (Tcb != NULL);\r
+\r
+ //\r
+ // Close the IP protocol.\r
+ //\r
+ gBS->CloseProtocol (\r
+ Tcb->IpInfo->ChildHandle,\r
+ IpProtocolGuid,\r
+ ProtoData->TcpService->IpIo->Image,\r
+ Sock->SockHandle\r
+ );\r
+\r
+ if (Sock->DestroyCallback != NULL) {\r
+ Sock->DestroyCallback (Sock, Sock->Context);\r
+ }\r
+\r
+ //\r
+ // Retrieve the protocol installed on this sock\r
+ //\r
+ Status = gBS->OpenProtocol (\r
+ Sock->SockHandle,\r
+ TcpProtocolGuid,\r
+ &SockProtocol,\r
+ Sock->DriverBinding,\r
+ Sock->SockHandle,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+\r
+ if (EFI_ERROR (Status)) {\r
+\r
+ DEBUG (\r
+ (EFI_D_ERROR,\r
+ "SockDestroyChild: Open protocol installed on socket failed with %r\n",\r
+ Status)\r
+ );\r
+ }\r
+\r
+ //\r
+ // Uninstall the protocol installed on this sock\r
+ //\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ Sock->SockHandle,\r
+ TcpProtocolGuid,\r
+ SockProtocol,\r
+ NULL\r
+ );\r
+\r
+\r