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
This commit is contained in:
lpleahy
2012-10-08 21:39:35 +00:00
parent e06a4cd134
commit 4652be0c5a
7 changed files with 295 additions and 111 deletions

View File

@@ -22,6 +22,59 @@
#include <Protocol/ServiceBinding.h>
/**
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