This documentation is archived and is not being maintained.

SocketPermission.IsSubsetOf Method

Determines if the current permission is a subset of the specified permission.

[Visual Basic]
Overrides Public Function IsSubsetOf( _
   ByVal target As IPermission _
) As Boolean Implements IPermission.IsSubsetOf
[C#]
public override bool IsSubsetOf(
 IPermission target
);
[C++]
public: bool IsSubsetOf(
 IPermission* target
);
[JScript]
public override function IsSubsetOf(
   target : IPermission
) : Boolean;

Parameters

target
A SocketPermission that is to be tested for the subset relationship.

Return Value

If target is a null reference (Nothing in Visual Basic), this method returns true if the current instance defines no permissions; otherwise, false. If target is not a null reference (Nothing), this method returns true if the current instance defines a subset of target permissions; otherwise, false.

Implements

IPermission.IsSubsetOf

Exceptions

Exception Type Condition
ArgumentException target is not a SocketException.
SecurityException DnsPermission is not granted to the method caller.

Remarks

The current permission is a subset of the specified permission if the current permission specifies a set of operations that is wholly contained by the specified permission.

For example, a permission that represents access to 192.168.1.1:80 is a subset of a permission that represents access to 192.168.1.1:Any. If this method returns true, the current permission represents no more access to the protected resource than does the specified permission.

Example

[Visual Basic, C#, C++] The following example uses the IsSubsetOf method to determine if one SocketPermission is the subset of another.

[Visual Basic] 
' Creates a SocketPermission restricting access to and from all URIs.
Dim mySocketPermission1 As New SocketPermission(PermissionState.None)

' The socket to which this permission will apply will allow connections from www.contoso.com.
mySocketPermission1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.contoso.com", 11000)

' Creates a SocketPermission which will allow the target Socket to connect with www.southridgevideo.com.
Dim mySocketPermission2 As New SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "www.southridgevideo.com", 11002)

' Creates a SocketPermission from the union of two SocketPermissions.
Dim mySocketPermissionUnion As SocketPermission = CType(mySocketPermission1.Union(mySocketPermission2), SocketPermission)

' Checks to see if the union was successfully created by using the IsSubsetOf method.
If mySocketPermission1.IsSubsetOf(mySocketPermissionUnion) And mySocketPermission2.IsSubsetOf(mySocketPermissionUnion) Then
   Console.WriteLine("This union contains permissions from both mySocketPermission1 and mySocketPermission2")
   
   ' Prints the allowable accept URIs to the console.
   Console.WriteLine("This union accepts connections on :")
   
   Dim myEnumerator As IEnumerator = mySocketPermissionUnion.AcceptList
   While myEnumerator.MoveNext()
      Console.WriteLine(CType(myEnumerator.Current, EndpointPermission).ToString())
   End While
   
   Console.WriteLine("This union establishes connections on : ")
   
   ' Prints the allowable connect URIs to the console.
   Console.WriteLine("This union permits connections to :")
   
   myEnumerator = mySocketPermissionUnion.ConnectList
   While myEnumerator.MoveNext()
      Console.WriteLine(CType(myEnumerator.Current, EndpointPermission).ToString())
   End While
End If 

[C#] 

     // Creates a SocketPermission restricting access to and from all URIs.
     SocketPermission mySocketPermission1 = new SocketPermission(PermissionState.None);

     // The socket to which this permission will apply will allow connections from www.contoso.com.
     mySocketPermission1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.contoso.com", 11000);

     // Creates a SocketPermission which will allow the target Socket to connect with www.southridgevideo.com.
     SocketPermission mySocketPermission2 =
                                new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "www.southridgevideo.com", 11002);

     // Creates a SocketPermission from the union of two SocketPermissions.
     SocketPermission mySocketPermissionUnion = 
                                (SocketPermission)mySocketPermission1.Union(mySocketPermission2);

     // Checks to see if the union was successfully created by using the IsSubsetOf method.
     if (mySocketPermission1.IsSubsetOf(mySocketPermissionUnion) && 
            mySocketPermission2.IsSubsetOf(mySocketPermissionUnion)){
          Console.WriteLine("This union contains permissions from both mySocketPermission1 and mySocketPermission2"); 

          // Prints the allowable accept URIs to the console.
          Console.WriteLine("This union accepts connections on :");

          IEnumerator myEnumerator = mySocketPermissionUnion.AcceptList;
       while (myEnumerator.MoveNext()) {
               Console.WriteLine(((EndpointPermission)myEnumerator.Current).ToString());
            }      

             // Prints the allowable connect URIs to the console.
          Console.WriteLine("This union permits connections to :");

          myEnumerator = mySocketPermissionUnion.ConnectList;
       while (myEnumerator.MoveNext()) {
               Console.WriteLine(((EndpointPermission)myEnumerator.Current).ToString());
            }      

           }


[C++] 

        // Creates a SocketPermission restricting access to and from all URIs.
        SocketPermission *mySocketPermission1 = new SocketPermission(PermissionState::None);

        // The socket to which this permission will apply will allow connections from www.contoso.com.
        mySocketPermission1->AddPermission(NetworkAccess::Accept, TransportType::Tcp, "www.contoso.com", 11000);

        // Creates a SocketPermission which will allow the target Socket to connect with www.southridgevideo.com.
        SocketPermission *mySocketPermission2 =
            new SocketPermission(NetworkAccess::Connect, TransportType::Tcp, "www.southridgevideo.com", 11002);

        // Creates a SocketPermission from the union of two SocketPermissions.
        SocketPermission *mySocketPermissionUnion = 
            __try_cast<SocketPermission *>(mySocketPermission1->Union(mySocketPermission2));

        // Checks to see if the union was successfully created by using the IsSubsetOf method.
        if (mySocketPermission1->IsSubsetOf(mySocketPermissionUnion) && 
            mySocketPermission2->IsSubsetOf(mySocketPermissionUnion)){
                Console::WriteLine("This union contains permissions from both mySocketPermission1 and mySocketPermission2"); 

                // Prints the allowable accept URIs to the console.
                Console::WriteLine("This union accepts connections on :");

                IEnumerator *myEnumerator = mySocketPermissionUnion->AcceptList;
                while (myEnumerator->MoveNext()) {
                    Console::WriteLine(__try_cast<EndpointPermission *>(myEnumerator->Current)->ToString());
                }      

                // Prints the allowable connect URIs to the console.
                Console::WriteLine("This union permits connections to :");

                myEnumerator = mySocketPermissionUnion->ConnectList;
                while (myEnumerator->MoveNext()) {
                    Console::WriteLine(__try_cast<EndpointPermission *>(myEnumerator->Current)->ToString());
                }      

            }

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, Common Language Infrastructure (CLI) Standard

See Also

SocketPermission Class | SocketPermission Members | System.Net Namespace

Show: