Socket.AcceptAsync Yöntem

Tanım

Aşırı Yüklemeler

AcceptAsync()

Gelen bağlantıyı kabul eder.

AcceptAsync(Socket)

Gelen bağlantıyı kabul eder.

AcceptAsync(SocketAsyncEventArgs)

Gelen bağlantı girişimini kabul etmek için zaman uyumsuz bir işlem başlatır.

AcceptAsync(CancellationToken)

Gelen bağlantıyı kabul eder.

AcceptAsync(Socket, CancellationToken)

Gelen bağlantıyı kabul eder.

AcceptAsync()

Kaynak:
Socket.Tasks.cs
Kaynak:
Socket.Tasks.cs
Kaynak:
Socket.Tasks.cs

Gelen bağlantıyı kabul eder.

public:
 System::Threading::Tasks::Task<System::Net::Sockets::Socket ^> ^ AcceptAsync();
public System.Threading.Tasks.Task<System.Net.Sockets.Socket> AcceptAsync ();
member this.AcceptAsync : unit -> System.Threading.Tasks.Task<System.Net.Sockets.Socket>
Public Function AcceptAsync () As Task(Of Socket)

Döndürülenler

Kabul edilen Yuva ile tamamlanan zaman uyumsuz bir görev.

Özel durumlar

Geçersiz bir işlem istendi. Bu özel durum, kabul eden Socket bağlantılara kulak vermiyorsa veya kabul edilen yuva bağlıysa oluşur.

yöntemini çağırmadan önce ve Listen(Int32) yöntemini çağırmanız Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) gerekir.

Bu özel durum, yuva zaten bağlıysa veya belirtilen e parametre kullanılarak bir yuva işlemi zaten devam ediyorsa da oluşur.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Açıklamalar

Bu yöntem, yöntemin zaman uyumlu karşılık geleninin atabileceği tüm kullanım dışı özel durumları döndürdüğü görevde depolar. Döndürülen görevde bir özel durum depolanıyorsa, görev beklenirken bu özel durum oluşturulur. gibi ArgumentExceptionkullanım özel durumları yine de zaman uyumlu olarak oluşturulur. Depolanan özel durumlar için tarafından oluşan Accept()özel durumlara bakın.

Şunlara uygulanır

AcceptAsync(Socket)

Kaynak:
Socket.Tasks.cs
Kaynak:
Socket.Tasks.cs
Kaynak:
Socket.Tasks.cs

Gelen bağlantıyı kabul eder.

public:
 System::Threading::Tasks::Task<System::Net::Sockets::Socket ^> ^ AcceptAsync(System::Net::Sockets::Socket ^ acceptSocket);
public System.Threading.Tasks.Task<System.Net.Sockets.Socket> AcceptAsync (System.Net.Sockets.Socket? acceptSocket);
member this.AcceptAsync : System.Net.Sockets.Socket -> System.Threading.Tasks.Task<System.Net.Sockets.Socket>
Public Function AcceptAsync (acceptSocket As Socket) As Task(Of Socket)

Parametreler

acceptSocket
Socket

Bağlantıyı kabul etmek için kullanılacak yuva.

Döndürülenler

Kabul edilen Yuva ile tamamlanan zaman uyumsuz bir görev.

Özel durumlar

Geçersiz bir işlem istendi. Bu özel durum, kabul eden Socket bağlantılara kulak vermiyorsa veya kabul edilen yuva bağlıysa oluşur.

yöntemini çağırmadan önce ve Listen(Int32) yöntemini çağırmanız Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) gerekir.

Bu özel durum, yuva zaten bağlıysa veya belirtilen e parametre kullanılarak bir yuva işlemi zaten devam ediyorsa da oluşur.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Şunlara uygulanır

AcceptAsync(SocketAsyncEventArgs)

Kaynak:
Socket.cs
Kaynak:
Socket.cs
Kaynak:
Socket.cs

Gelen bağlantı girişimini kabul etmek için zaman uyumsuz bir işlem başlatır.

public:
 bool AcceptAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool AcceptAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.AcceptAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function AcceptAsync (e As SocketAsyncEventArgs) As Boolean

Parametreler

e
SocketAsyncEventArgs

SocketAsyncEventArgs Bu zaman uyumsuz yuva işlemi için kullanılacak nesne.

Döndürülenler

true G/Ç işlemi bekliyorsa. Completed parametresindeki e olay, işlem tamamlandıktan sonra tetiklenir.

false G/Ç işlemi zaman uyumlu olarak tamamlandıysa. Completed parametresindeki e olay tetiklenmez ve e parametre olarak geçirilen nesne, işlem sonucunu almak için yöntem çağrısı döndürüldükten hemen sonra incelenebilir.

Özel durumlar

Bağımsız değişken geçerli değil. Sağlanan arabellek yeterince büyük değilse bu özel durum oluşur. Arabellek en az 2 * (sizeof(SOCKADDR_STORAGE + 16) bayt olmalıdır.

Bu özel durum, birden çok arabellek belirtilirse de oluşur, BufferList özellik null değildir.

Bağımsız değişken aralık dışında. 0'dan küçükse Count özel durum oluşur.

Geçersiz bir işlem istendi. Bu özel durum, kabul eden Socket bağlantılara kulak vermiyorsa veya kabul edilen yuva bağlıysa oluşur.

yöntemini çağırmadan önce ve Listen(Int32) yöntemini çağırmanız Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) gerekir.

Bu özel durum, yuva zaten bağlıysa veya belirtilen e parametre kullanılarak bir yuva işlemi zaten devam ediyorsa da oluşur.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Açıklamalar

Bağlantı odaklı protokoller, gelen bağlantı girişimlerini zaman uyumsuz olarak işlemek için yöntemini kullanabilir AcceptAsync . Bağlantıları zaman uyumsuz olarak kabul etmek, ayrı bir yürütme iş parçacığı içinde veri gönderip alma olanağı sağlar. yöntemini çağırmadan AcceptAsync önce gelen bağlantı isteklerini dinlemek ve kuyruğa almak için yöntemini çağırmanız Listen gerekir.

Tamamlanma bildirimi almak için EventHandler<SocketAsyncEventArgs> temsilcisini uygulayan bir geri çağırma yöntemi oluşturmanız ve bunu SocketAsyncEventArgs.Completed olaya bağlamanız gerekir.

Nesnede System.Net.Sockets.SocketAsyncEventArgs aşağıdaki özellikler ve olaylar gereklidir:

Çağıran isteğe bağlı olarak, özelliğiyle SocketAsyncEventArgs.AcceptSocket kullanılacak öğesini belirterek Socket gelen bağlantı için kullanılacak mevcut Socket bir öğeyi belirtebilir.

SocketAsyncEventArgs.AcceptSocket Özellik null ise, geçerli Socket ile aynı AddressFamily, SocketTypeve ProtocolType ile yeni Socket bir oluşturulur ve özellik olarak SocketAsyncEventArgs.AcceptSocket ayarlanır.

Çağıran, yöntemi çağırmadan AcceptAsync önce istenen herhangi bir kullanıcı durumu nesnesine özelliğini ayarlayabilirSocketAsyncEventArgs.UserToken, böylece bilgiler geri çağırma yönteminde alınabilir. Geri çağırma tek bir nesneden daha fazla bilgiye ihtiyaç duyuyorsa, diğer gerekli durum bilgilerini üye olarak tutmak için küçük bir sınıf oluşturulabilir.

İsteğe bağlı olarak, yöntem başarılı olduktan sonra ConnectAsync yuvadaki ilk veri bloğunun alınacağı bir arabellek sağlanabilir. Bu durumda, özelliğin SocketAsyncEventArgs.Buffer alınacak verileri içeren arabelleğe ayarlanması ve özelliğin SocketAsyncEventArgs.Count arabellekte alınacak en fazla veri bayt sayısına ayarlanması gerekir. Bu özellikler yöntemi kullanılarak SocketAsyncEventArgs.SetBuffer ayarlanabilir. geçirilen arabelleğin bir bölümü, temel alınan Winsock AcceptEx çağrısı tarafından kullanılmak üzere dahili olarak kullanılır. Bu, döndürülen veri miktarının sağlanan örnekteki özelliğin System.Net.Sockets.SocketAsyncEventArgs değerinden SocketAsyncEventArgs.Count her zaman daha az olacağı anlamına gelir. Dahili olarak kullanılan arabellek miktarı, yuvanın adres ailesine göre değişir. Gereken en düşük arabellek boyutu 288 bayttır. Daha büyük bir arabellek boyutu belirtilirse, Socket Winsock AcceptEx çağrısı tarafından alınan adres verileri dışında bazı ek veriler beklenir ve bu ek veriler alınana kadar bekler. Zaman aşımı oluşursa bağlantı sıfırlanır. Dolayısıyla belirli bir miktardan fazla veri bekleniyorsa arabellek boyutu en düşük arabellek boyutuna ve bu miktara ayarlanmalıdır.

Tamamlama geri çağırma yöntemi, işlemin başarılı olup olmadığını AcceptAsync belirlemek için özelliğini incelemelidirSocketAsyncEventArgs.SocketError.

Olay SocketAsyncEventArgs.Completed , hiçbir bağlantı kabul edilmediğinde ve özelliğinin olarak ayarlanmasına SocketAsyncEventArgs.SocketErrorConnectionResetneden olduğunda bazı durumlarda oluşabilir. Bu, yarı açık bir SYN türü taraması (SYN - SYN-ACK ->> RST dizisi) kullanılarak bağlantı noktası taramasının bir sonucu olarak ortaya çıkabilir. yöntemini kullanan AcceptAsync uygulamalar bu koşulu işlemeye hazır olmalıdır.

Ayrıca bkz.

Şunlara uygulanır

AcceptAsync(CancellationToken)

Kaynak:
Socket.Tasks.cs
Kaynak:
Socket.Tasks.cs
Kaynak:
Socket.Tasks.cs

Gelen bağlantıyı kabul eder.

public:
 System::Threading::Tasks::ValueTask<System::Net::Sockets::Socket ^> AcceptAsync(System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket> AcceptAsync (System.Threading.CancellationToken cancellationToken);
member this.AcceptAsync : System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket>
Public Function AcceptAsync (cancellationToken As CancellationToken) As ValueTask(Of Socket)

Parametreler

cancellationToken
CancellationToken

Zaman uyumsuz işlemi iptal etmek için kullanılabilecek bir iptal belirteci.

Döndürülenler

Kabul edilen Yuva ile tamamlanan zaman uyumsuz bir görev.

Özel durumlar

Geçersiz bir işlem istendi. Bu özel durum, kabul eden Socket bağlantılara kulak vermiyorsa veya kabul edilen yuva bağlıysa oluşur.

yöntemini çağırmadan önce ve Listen(Int32) yöntemini çağırmanız Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) gerekir.

Bu özel durum, yuva zaten bağlıysa veya belirtilen e parametre kullanılarak bir yuva işlemi zaten devam ediyorsa da oluşur.

Yuvaya erişmeye çalışılırken bir hata oluştu.

İptal belirteci iptal edildi. Bu özel durum, döndürülen görevde depolanır.

Açıklamalar

Bu yöntem, yöntemin zaman uyumlu karşılık geleninin atabileceği tüm kullanım dışı özel durumları döndürdüğü görevde depolar. Döndürülen görevde bir özel durum depolanıyorsa, görev beklenirken bu özel durum oluşturulur. gibi ArgumentExceptionkullanım özel durumları yine de zaman uyumlu olarak oluşturulur. Depolanan özel durumlar için tarafından oluşan Accept()özel durumlara bakın.

Şunlara uygulanır

AcceptAsync(Socket, CancellationToken)

Kaynak:
Socket.Tasks.cs
Kaynak:
Socket.Tasks.cs
Kaynak:
Socket.Tasks.cs

Gelen bağlantıyı kabul eder.

public:
 System::Threading::Tasks::ValueTask<System::Net::Sockets::Socket ^> AcceptAsync(System::Net::Sockets::Socket ^ acceptSocket, System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket> AcceptAsync (System.Net.Sockets.Socket? acceptSocket, System.Threading.CancellationToken cancellationToken);
member this.AcceptAsync : System.Net.Sockets.Socket * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket>
Public Function AcceptAsync (acceptSocket As Socket, cancellationToken As CancellationToken) As ValueTask(Of Socket)

Parametreler

acceptSocket
Socket

Bağlantıyı kabul etmek için kullanılacak yuva.

cancellationToken
CancellationToken

Zaman uyumsuz işlemi iptal etmek için kullanılabilecek bir iptal belirteci.

Döndürülenler

Kabul edilen Yuva ile tamamlanan zaman uyumsuz bir görev.

Özel durumlar

Geçersiz bir işlem istendi. Bu özel durum, kabul eden Socket bağlantılara kulak vermiyorsa veya kabul edilen yuva bağlıysa oluşur.

yöntemini çağırmadan önce ve Listen(Int32) yöntemini çağırmanız Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) gerekir.

Bu özel durum, yuva zaten bağlıysa veya belirtilen e parametre kullanılarak bir yuva işlemi zaten devam ediyorsa da oluşur.

Yuvaya erişmeye çalışılırken bir hata oluştu.

İptal belirteci iptal edildi. Bu özel durum, döndürülen görevde depolanır.

Şunlara uygulanır