Socket.Select Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Ö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
- 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
- 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
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.