From 4652be0c5a106d0604c2d3274803fc0f844b0433 Mon Sep 17 00:00:00 2001 From: lpleahy Date: Mon, 8 Oct 2012 21:39:35 +0000 Subject: Fixed close for socket to properly release the socket context structure and the handle. Signed-off-by: lpleahy git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13802 6f19259b-4bc3-4df7-8a09-765794883524 --- StdLib/UseSocketDxe/UseSocketDxe.c | 53 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'StdLib/UseSocketDxe') diff --git a/StdLib/UseSocketDxe/UseSocketDxe.c b/StdLib/UseSocketDxe/UseSocketDxe.c index 6074143264..423419c23e 100644 --- a/StdLib/UseSocketDxe/UseSocketDxe.c +++ b/StdLib/UseSocketDxe/UseSocketDxe.c @@ -22,6 +22,59 @@ #include +/** + Free the socket resources + + This releases the socket resources allocated by calling + EslServiceGetProtocol. + + This routine is called from the ::close routine in BsdSocketLib + to release the socket resources. + + @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL + structure + + @return Value for ::errno, zero (0) indicates success. + + **/ +int +EslServiceFreeProtocol ( + IN EFI_SOCKET_PROTOCOL * pSocketProtocol + ) +{ + EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding; + int RetVal; + EFI_STATUS Status; + + // + // Assume success + // + RetVal = 0; + + // + // Locate the socket protocol + // + Status = gBS->LocateProtocol ( &gEfiSocketServiceBindingProtocolGuid, + NULL, + (VOID **) &pServiceBinding ); + if ( !EFI_ERROR ( Status )) { + // + // Release the handle + // + Status = pServiceBinding->DestroyChild ( pServiceBinding, + pSocketProtocol->SocketHandle ); + } + if ( EFI_ERROR ( Status )) { + RetVal = EIO; + } + + // + // Return the operation status + // + return RetVal; +} + + /** Connect to the EFI socket library -- cgit v1.2.3