Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

SocketPermission Class

Controls rights to make or accept connections on a transport address.

For a list of all members of this type, see SocketPermission Members.

System.Object
   System.Security.CodeAccessPermission
      System.Net.SocketPermission

[Visual Basic]
<Serializable>
NotInheritable Public Class SocketPermission
   Inherits CodeAccessPermission
   Implements IUnrestrictedPermission
[C#]
[Serializable]
public sealed class SocketPermission : CodeAccessPermission,
   IUnrestrictedPermission
[C++]
[Serializable]
public __gc __sealed class SocketPermission : public
   CodeAccessPermission, IUnrestrictedPermission
[JScript]
public
   Serializable
class SocketPermission extends CodeAccessPermission
   implements IUnrestrictedPermission

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Remarks

SocketPermission instances control permission to accept connections or initiate Socket connections. A Socket permission can be established for a host name or IP address, a port number, and a transport protocol.

Example

[Visual Basic, C#, C++] The following example demonstrates how to use the SocketPermission class to set, change, and enforce various socket access restrictions.

[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 
' Creates a SocketPermission from the intersect of two SocketPermissions.
Dim mySocketPermissionIntersect As SocketPermission = CType(mySocketPermission1.Intersect(mySocketPermissionUnion), SocketPermission)

' mySocketPermissionIntersect should now contain the permissions of mySocketPermission1.
If mySocketPermission1.IsSubsetOf(mySocketPermissionIntersect) Then
   Console.WriteLine("This is expected")
End If
' mySocketPermissionIntersect should not contain the permissios of mySocketPermission2.
If mySocketPermission2.IsSubsetOf(mySocketPermissionIntersect) Then
   Console.WriteLine("This should not print")
End If

' Creates a copy of the intersect SocketPermission.
Dim mySocketPermissionIntersectCopy As SocketPermission = CType(mySocketPermissionIntersect.Copy(), SocketPermission)

If mySocketPermissionIntersectCopy.Equals(mySocketPermissionIntersect) Then
   Console.WriteLine("Copy successfull")
End If
' Converts a SocketPermission to XML format and then immediately converts it back to a SocketPermission.
mySocketPermission1.FromXml(mySocketPermission1.ToXml())


' Checks to see if permission for this socket resource is unrestricted.  If it is, then there is no need to
' demand that permissions be enforced.
If mySocketPermissionUnion.IsUnrestricted() Then

'Do nothing.  There are no restrictions.
Else
   ' Enforces the permissions found in mySocketPermissionUnion on any Socket Resources used below this statement. 
   mySocketPermissionUnion.Demand()
End If

Dim myIpHostEntry As IPHostEntry = Dns.Resolve("www.contoso.com")
Dim myLocalEndPoint As New IPEndPoint(myIpHostEntry.AddressList(0), 11000)

Dim s As New Socket(myLocalEndPoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
Try
   s.Connect(myLocalEndPoint)
Catch e As Exception
   Console.WriteLine(("Exception Thrown: " + e.ToString()))
End Try

' Perform all socket operations in here.
s.Close()
   End Sub 'MySocketPermission

[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());
            }      

           }


     // Creates a SocketPermission from the intersect of two SocketPermissions.
     SocketPermission mySocketPermissionIntersect = 
                               (SocketPermission)mySocketPermission1.Intersect(mySocketPermissionUnion);

     // mySocketPermissionIntersect should now contain the permissions of mySocketPermission1.
     if (mySocketPermission1.IsSubsetOf(mySocketPermissionIntersect)){
          Console.WriteLine("This is expected");
     }
    // mySocketPermissionIntersect should not contain the permissios of mySocketPermission2.
     if (mySocketPermission2.IsSubsetOf(mySocketPermissionIntersect)){
          Console.WriteLine("This should not print");
     }



// Creates a copy of the intersect SocketPermission.
     SocketPermission mySocketPermissionIntersectCopy = 
                               (SocketPermission)mySocketPermissionIntersect.Copy();

     if (mySocketPermissionIntersectCopy.Equals(mySocketPermissionIntersect)){
     Console.WriteLine("Copy successfull");
     }


     // Converts a SocketPermission to XML format and then immediately converts it back to a SocketPermission.
     mySocketPermission1.FromXml(mySocketPermission1.ToXml());
     

     // Checks to see if permission for this socket resource is unrestricted.  If it is, then there is no need to
     // demand that permissions be enforced.
     if (mySocketPermissionUnion.IsUnrestricted()){
         
          //Do nothing.  There are no restrictions.

     }
     else{
         // Enforces the permissions found in mySocketPermissionUnion on any Socket Resources used below this statement. 
         mySocketPermissionUnion.Demand();
     }

    IPHostEntry myIpHostEntry = Dns.Resolve("www.contoso.com");
    IPEndPoint myLocalEndPoint = new IPEndPoint(myIpHostEntry.AddressList[0], 11000);

       Socket s = new Socket(myLocalEndPoint.Address.AddressFamily,
                                      SocketType.Stream,
                                         ProtocolType.Tcp);
       try{
            s.Connect(myLocalEndPoint);
       }
       catch (Exception e){
            Console.WriteLine("Exception Thrown: " + e.ToString());
       } 

      // Perform all socket operations in here.
      
      s.Close();

[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());
                }      

            }


            // Creates a SocketPermission from the intersect of two SocketPermissions.
            SocketPermission *mySocketPermissionIntersect = 
                __try_cast<SocketPermission *>(mySocketPermission1->Intersect(mySocketPermissionUnion));

            // mySocketPermissionIntersect should now contain the permissions of mySocketPermission1.
            if (mySocketPermission1->IsSubsetOf(mySocketPermissionIntersect)){
                Console::WriteLine("This is expected");
            }
            // mySocketPermissionIntersect should not contain the permissios of mySocketPermission2.
            if (mySocketPermission2->IsSubsetOf(mySocketPermissionIntersect)){
                Console::WriteLine("This should not print");
            }



            // Creates a copy of the intersect SocketPermission.
            SocketPermission *mySocketPermissionIntersectCopy = 
                __try_cast<SocketPermission *>(mySocketPermissionIntersect->Copy());

            if (mySocketPermissionIntersectCopy->Equals(mySocketPermissionIntersect)){
                Console::WriteLine("Copy successfull");
            }


            // Converts a SocketPermission to XML format and then immediately converts it back to a SocketPermission.
            mySocketPermission1->FromXml(mySocketPermission1->ToXml());


            // Checks to see if permission for this socket resource is unrestricted.  If it is, then there is no need to
            // demand that permissions be enforced.
            if (mySocketPermissionUnion->IsUnrestricted()){

                //Do nothing.  There are no restrictions.

            }
            else{
                // Enforces the permissions found in mySocketPermissionUnion on any Socket Resources used below this statement. 
                mySocketPermissionUnion->Demand();
            }

            IPHostEntry *myIpHostEntry = Dns::Resolve("www.contoso.com");
            IPEndPoint *myLocalEndPoint = new IPEndPoint(myIpHostEntry->AddressList[0], 11000);

            Socket *s = new Socket(myLocalEndPoint->Address->AddressFamily,
                SocketType::Stream, ProtocolType::Tcp);
            try{
                s->Connect(myLocalEndPoint);
            }
            catch (Exception *e){
                Console::Write("Exception Thrown: ");
                Console::WriteLine(e->ToString());
            } 

            // Perform all socket operations in here.

            s->Close();

[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

Namespace: System.Net

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

Assembly: System (in System.dll)

See Also

SocketPermission Members | System.Net Namespace

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.