Socket.Select Metod

Definition

Överlagringar

Name Description
Select(IList, IList, IList, TimeSpan)

Avgör statusen för en eller flera socketar.

Select(IList, IList, IList, Int32)

Avgör statusen för en eller flera socketar.

Select(IList, IList, IList, TimeSpan)

Källa:
Socket.cs
Källa:
Socket.cs
Källa:
Socket.cs
Källa:
Socket.cs
Källa:
Socket.cs

Avgör statusen för en eller flera socketar.

public:
 static void Select(System::Collections::IList ^ checkRead, System::Collections::IList ^ checkWrite, System::Collections::IList ^ checkError, TimeSpan timeout);
public static void Select(System.Collections.IList? checkRead, System.Collections.IList? checkWrite, System.Collections.IList? checkError, TimeSpan timeout);
static member Select : System.Collections.IList * System.Collections.IList * System.Collections.IList * TimeSpan -> unit
Public Shared Sub Select (checkRead As IList, checkWrite As IList, checkError As IList, timeout As TimeSpan)

Parametrar

checkRead
IList

En IList av Socket instanser för att söka efter läsbarhet.

checkWrite
IList

En IList av Socket instanser för att söka efter skrivbarhet.

checkError
IList

En IList av Socket instanser för att söka efter fel.

timeout
TimeSpan

Timeout-värdet. Ett värde som är lika med -1 mikrosekunder anger en oändlig tidsgräns.

Undantag

Parametrarna checkRead, checkWriteoch checkError är alla null eller tomma. Minst en av checkRead, checkWriteeller checkError måste innehålla minst en Socket.

Parametern checkRead, checkWriteeller checkError innehåller för många socketar.

Var timeout mindre än -1 mikrosekunder eller större än MaxValue mikrosekunder

Ett fel uppstod vid försök att komma åt socketen.

En eller flera socketar togs bort.

Gäller för

Select(IList, IList, IList, Int32)

Källa:
Socket.cs
Källa:
Socket.cs
Källa:
Socket.cs
Källa:
Socket.cs
Källa:
Socket.cs

Avgör statusen för en eller flera socketar.

public:
 static void Select(System::Collections::IList ^ checkRead, System::Collections::IList ^ checkWrite, System::Collections::IList ^ checkError, int microSeconds);
public static void Select(System.Collections.IList? checkRead, System.Collections.IList? checkWrite, System.Collections.IList? checkError, int microSeconds);
public static void Select(System.Collections.IList checkRead, System.Collections.IList checkWrite, System.Collections.IList checkError, int microSeconds);
static member Select : System.Collections.IList * System.Collections.IList * System.Collections.IList * int -> unit
Public Shared Sub Select (checkRead As IList, checkWrite As IList, checkError As IList, microSeconds As Integer)

Parametrar

checkRead
IList

En IList av Socket instanser för att söka efter läsbarhet.

checkWrite
IList

En IList av Socket instanser för att söka efter skrivbarhet.

checkError
IList

En IList av Socket instanser för att söka efter fel.

microSeconds
Int32

Tidsgränsvärdet i mikrosekunder. Ett -1 värde indikerar en oändlig timeout.

Undantag

Parametrarna checkRead, checkWriteoch checkError är alla null eller tomma. Minst en av checkRead, checkWriteeller checkError måste innehålla minst en Socket.

Ett fel uppstod vid försök att komma åt socketen.

.NET 5 och senare: En eller flera uttag tas bort.

Parametern checkRead, checkWriteeller checkError innehåller för många socketar.

Exempel

I följande kodexempel används Select för att avgöra vilka lyssningsuttag som har en anslutningsbegäran.

IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostEntry.AddressList[0];

Socket socket0 = null;
Socket socket1 = null;
Socket socket2 = null;
Socket socket3 = null;
Socket socket4 = null;
Socket socket5 = null;

ArrayList listenList = new ArrayList();
listenList.Add(socket0);
listenList.Add(socket1);
listenList.Add(socket2);

ArrayList acceptList = new ArrayList();
acceptList.Add(socket3);
acceptList.Add(socket4);
acceptList.Add(socket5);

for( int i = 0; i < 3; i++ )
{
  listenList[i] = new Socket(AddressFamily.InterNetwork,
                             SocketType.Stream,
                             ProtocolType.Tcp);
  ((Socket)listenList[i]).Bind(new IPEndPoint(ipAddress, 11000 + i));
  ((Socket)listenList[i]).Listen(10);
}

// Only the sockets that contain a connection request
// will remain in listenList after Select returns.

Socket.Select(listenList, null, null, 1000);

for( int i = 0; i < listenList.Count; i++ )
{
  acceptList[i] = ((Socket)listenList[i]).Accept();
}
Dim ipHostEntry As IPHostEntry = Dns.Resolve(Dns.GetHostName())
Dim ipAddress As IPAddress = ipHostEntry.AddressList(0)

Dim socket0 As Socket = Nothing
Dim socket1 As Socket = Nothing
Dim socket2 As Socket = Nothing
Dim socket3 As Socket = Nothing
Dim socket4 As Socket = Nothing
Dim socket5 As Socket = Nothing

Dim listenList As New ArrayList()
listenList.Add(socket0)
listenList.Add(socket1)
listenList.Add(socket2)

Dim acceptList As New ArrayList()
acceptList.Add(socket3)
acceptList.Add(socket4)
acceptList.Add(socket5)

Dim i As Integer
For i = 0 To 2
   listenList(i) = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
   CType(listenList(i), Socket).Bind(New IPEndPoint(ipAddress, 11000 + i))
   CType(listenList(i), Socket).Listen(10)
Next i

'Only the sockets that contain a connection request
'will remain in listenList after Select returns.
Socket.Select(listenList, Nothing, Nothing, 1000)

For i = 0 To listenList.Count - 1
   acceptList(i) = CType(listenList(i), Socket).Accept()
Next i

Kommentarer

Select är en statisk metod som avgör statusen för en eller flera Socket instanser. Du måste placera en eller flera socketar i en IList innan du kan använda Select metoden. Kontrollera läsbarheten genom att anropa Select med IList parametern checkRead som parameter. Använd parametern checkWrite om du vill kontrollera om dina socketar är skrivbara. För att identifiera feltillstånd använder du checkError. När du har anropat SelectIList fylls endast de socketar som uppfyller villkoren.

Om du är i ett lyssningstillstånd innebär läsbarhet att ett anrop till Accept lyckas utan att blockera. Om du redan har godkänt anslutningen innebär läsbarhet att data är tillgängliga för läsning. I dessa fall lyckas alla mottagningsåtgärder utan blockering. Läsbarhet kan också ange om fjärren Socket har stängt av anslutningen. I så fall returneras ett anrop till Receive omedelbart, med noll byte returnerade.

Select returnerar när minst en av de sockets av intresse (sockets i checkRead, checkWriteoch checkError listor) uppfyller sina angivna villkor, eller parametern microSeconds överskrids, beroende på vilket som kommer först. Inställningen microSeconds till -1 anger en oändlig tidsgräns.

Om du gör ett icke-blockerande anrop till Connectinnebär skrivbarhet att du har anslutit. Om du redan har en upprättad anslutning innebär skrivbarhet att alla sändningsåtgärder lyckas utan att blockera.

Om du har gjort ett icke-blockerande anrop till Connectidentifierar parametern checkerror sockets som inte har anslutits.

Note

Poll Använd metoden om du bara vill fastställa statusen för en enskild Socket.

Note

Den här metoden kan inte identifiera vissa typer av anslutningsproblem, till exempel en trasig nätverkskabel, eller att fjärrvärden stängdes av felaktigt. Du måste försöka skicka eller ta emot data för att identifiera den här typen av fel.

Note

Om du får en SocketExceptionanvänder du SocketException.ErrorCode egenskapen för att hämta den specifika felkoden. När du har fått den här koden läser du felkoden Windows Sockets version 2 för en detaljerad beskrivning av felet.

Se även

Gäller för