다음을 통해 공유


Socket.AcceptAsync 메서드

정의

오버로드

AcceptAsync()

들어오는 연결을 허용합니다.

AcceptAsync(Socket)

들어오는 연결을 허용합니다.

AcceptAsync(SocketAsyncEventArgs)

들어오는 연결 시도를 받아들이는 비동기 작업을 시작합니다.

AcceptAsync(CancellationToken)

들어오는 연결을 허용합니다.

AcceptAsync(Socket, CancellationToken)

들어오는 연결을 허용합니다.

AcceptAsync()

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

들어오는 연결을 허용합니다.

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)

반환

허용되는 소켓으로 완료되는 비동기 작업입니다.

예외

잘못된 작업이 요청된 경우. 받아들이는 Socket이 연결을 수신 대기하지 않거나 받아들인 소켓이 바인딩되어 있으면 이 예외가 발생합니다.

Bind(EndPoint) 메서드를 호출하기 전에 Listen(Int32)AcceptAsync(SocketAsyncEventArgs) 메서드를 호출해야 합니다.

소켓이 이미 연결되어 있거나 지정된 e 매개 변수를 사용하여 소켓 작업이 이미 진행 중인 경우에도 이 예외가 발생합니다.

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

설명

이 메서드는 메서드의 동기 대응에서 throw할 수 있는 모든 비사용 예외를 반환하는 태스크에 저장됩니다. 예외가 반환된 작업에 저장되면 작업이 대기될 때 해당 예외가 throw됩니다. 와 같은 ArgumentException사용 예외는 여전히 동기적으로 throw됩니다. 저장된 예외는 에서 throw Accept()된 예외를 참조하세요.

적용 대상

AcceptAsync(Socket)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

들어오는 연결을 허용합니다.

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)

매개 변수

acceptSocket
Socket

연결을 수락하는 데 사용할 소켓입니다.

반환

허용되는 소켓으로 완료되는 비동기 작업입니다.

예외

잘못된 작업이 요청된 경우. 받아들이는 Socket이 연결을 수신 대기하지 않거나 받아들인 소켓이 바인딩되어 있으면 이 예외가 발생합니다.

Bind(EndPoint) 메서드를 호출하기 전에 Listen(Int32)AcceptAsync(SocketAsyncEventArgs) 메서드를 호출해야 합니다.

소켓이 이미 연결되어 있거나 지정된 e 매개 변수를 사용하여 소켓 작업이 이미 진행 중인 경우에도 이 예외가 발생합니다.

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

적용 대상

AcceptAsync(SocketAsyncEventArgs)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

들어오는 연결 시도를 받아들이는 비동기 작업을 시작합니다.

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

매개 변수

e
SocketAsyncEventArgs

이 비동기 소켓 작업에 사용할 SocketAsyncEventArgs 개체입니다.

반환

I/O 작업이 보류 중인 경우 true입니다. 작업이 완료되면 e 매개 변수에 대한 Completed 이벤트가 발생합니다.

I/O 작업이 동기적으로 완료된 경우 false입니다. 이 경우에는 e 매개 변수에서 Completed 이벤트가 발생하지 않으며, 메서드 호출이 반환된 직후 매개 변수로 전달된 e 개체를 검사하여 작업 결과를 검색할 수 있습니다.

예외

인수가 잘못된 경우. 제공된 버퍼의 크기가 너무 작으면 이 예외가 발생합니다. 버퍼의 크기는 최소한 2 * (sizeof(SOCKADDR_STORAGE + 16)바이트 이상이어야 합니다.

버퍼를 여러 개 지정하고 BufferList 속성이 null이 아닌 경우에도 이 예외가 발생합니다.

인수가 범위를 벗어난 경우. Count가 0보다 작으면 이 예외가 발생합니다.

잘못된 작업이 요청된 경우. 받아들이는 Socket이 연결을 수신 대기하지 않거나 받아들인 소켓이 바인딩되어 있으면 이 예외가 발생합니다.

Bind(EndPoint) 메서드를 호출하기 전에 Listen(Int32)AcceptAsync(SocketAsyncEventArgs) 메서드를 호출해야 합니다.

소켓이 이미 연결되어 있거나 지정된 e 매개 변수를 사용하여 소켓 작업이 이미 진행 중인 경우에도 이 예외가 발생합니다.

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

설명

연결 지향 프로토콜은 메서드를 AcceptAsync 사용하여 들어오는 연결 시도를 비동기적으로 처리할 수 있습니다. 연결을 비동기적으로 수락하면 별도의 실행 스레드 내에서 데이터를 보내고 받을 수 있습니다. 메서드를 AcceptAsync 호출하기 전에 메서드를 Listen 호출하여 들어오는 연결 요청을 수신 대기하고 큐에 대기해야 합니다.

완료 알림을 받으려면 EventHandler<SocketAsyncEventArgs> 대리자를 구현하고 이벤트에 후크하는 콜백 메서드를 SocketAsyncEventArgs.Completed 만들어야 합니다.

개체에 대한 System.Net.Sockets.SocketAsyncEventArgs 다음 속성 및 이벤트가 필요합니다.

호출자는 필요에 따라 속성과 함께 사용할 을 지정하여 Socket 들어오는 연결에 사용할 기존 SocketSocketAsyncEventArgs.AcceptSocket 지정할 수 있습니다.

속성이 SocketAsyncEventArgs.AcceptSocket null이면 새 Socket 는 동일한 AddressFamily, 및 SocketTypeProtocolType 를 현재 Socket 로 생성하고 속성으로 SocketAsyncEventArgs.AcceptSocket 설정합니다.

호출자는 콜백 메서드에서 SocketAsyncEventArgs.UserToken 정보를 검색할 수 있도록 메서드를 호출 AcceptAsync 하기 전에 속성을 원하는 사용자 상태 개체로 설정할 수 있습니다. 콜백에 단일 개체보다 더 많은 정보가 필요한 경우 다른 필수 상태 정보를 멤버로 유지하기 위해 작은 클래스를 만들 수 있습니다.

필요에 따라 메서드가 성공한 후 소켓에서 초기 데이터 블록을 받을 버퍼가 ConnectAsync 제공될 수 있습니다. 이 경우 SocketAsyncEventArgs.Buffer 속성을 받을 데이터가 포함된 버퍼로 설정해야 하며 SocketAsyncEventArgs.Count , 속성을 버퍼에서 받을 최대 데이터 바이트 수로 설정해야 합니다. 이러한 속성은 메서드를 SocketAsyncEventArgs.SetBuffer 사용하여 설정할 수 있습니다. 전달된 버퍼의 일부는 내부적으로 기본 Winsock AcceptEx 호출에서 사용하기 위해 소비됩니다. 즉, 반환되는 데이터의 양은 항상 제공된 instance 속성 System.Net.Sockets.SocketAsyncEventArgsSocketAsyncEventArgs.Count 보다 작습니다. 내부적으로 사용되는 버퍼의 양은 소켓의 주소 패밀리에 따라 달라집니다. 필요한 최소 버퍼 크기는 288바이트입니다. 더 큰 버퍼 크기를 지정 Socket 하면 는 Winsock AcceptEx 호출에서 받은 주소 데이터 이외의 일부 추가 데이터를 예상하며 이 추가 데이터가 수신될 때까지 기다립니다. 시간 제한이 발생하면 연결이 다시 설정됩니다. 따라서 추가 데이터가 특정 양으로 예상되는 경우 버퍼 크기를 최소 버퍼 크기와 이 양으로 설정해야 합니다.

완료 콜백 메서드는 속성을 검사 SocketAsyncEventArgs.SocketError 하여 작업이 성공했는지 AcceptAsync 확인해야 합니다.

SocketAsyncEventArgs.Completed 이 이벤트는 연결이 수락되지 않은 경우에 발생할 수 있으며 속성이 SocketAsyncEventArgs.SocketError 로 설정되도록 할 ConnectionReset수 있습니다. 이는 반쯤 열려 있는 SYN 유형 검사(SYN - SYN-ACK ->> RST 시퀀스)를 사용하여 포트 검색의 결과로 발생할 수 있습니다. 사용 하 여 애플리케이션을 AcceptAsync 메서드는이 조건을 처리할 준비가 되어 있어야 합니다.

추가 정보

적용 대상

AcceptAsync(CancellationToken)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

들어오는 연결을 허용합니다.

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)

매개 변수

cancellationToken
CancellationToken

비동기 작업을 취소하는 데 사용할 수 있는 취소 토큰입니다.

반환

허용되는 소켓으로 완료되는 비동기 작업입니다.

예외

잘못된 작업이 요청된 경우. 받아들이는 Socket이 연결을 수신 대기하지 않거나 받아들인 소켓이 바인딩되어 있으면 이 예외가 발생합니다.

Bind(EndPoint) 메서드를 호출하기 전에 Listen(Int32)AcceptAsync(SocketAsyncEventArgs) 메서드를 호출해야 합니다.

소켓이 이미 연결되어 있거나 지정된 e 매개 변수를 사용하여 소켓 작업이 이미 진행 중인 경우에도 이 예외가 발생합니다.

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

취소 토큰이 취소되었습니다. 이 예외는 반환된 작업에 저장됩니다.

설명

이 메서드는 메서드의 동기 대응에서 throw할 수 있는 모든 비사용 예외를 반환하는 태스크에 저장됩니다. 예외가 반환된 작업에 저장되면 작업이 대기될 때 해당 예외가 throw됩니다. 와 같은 ArgumentException사용 예외는 여전히 동기적으로 throw됩니다. 저장된 예외는 에서 throw Accept()된 예외를 참조하세요.

적용 대상

AcceptAsync(Socket, CancellationToken)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

들어오는 연결을 허용합니다.

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)

매개 변수

acceptSocket
Socket

연결을 수락하는 데 사용할 소켓입니다.

cancellationToken
CancellationToken

비동기 작업을 취소하는 데 사용할 수 있는 취소 토큰입니다.

반환

허용되는 소켓으로 완료되는 비동기 작업입니다.

예외

잘못된 작업이 요청된 경우. 받아들이는 Socket이 연결을 수신 대기하지 않거나 받아들인 소켓이 바인딩되어 있으면 이 예외가 발생합니다.

Bind(EndPoint) 메서드를 호출하기 전에 Listen(Int32)AcceptAsync(SocketAsyncEventArgs) 메서드를 호출해야 합니다.

소켓이 이미 연결되어 있거나 지정된 e 매개 변수를 사용하여 소켓 작업이 이미 진행 중인 경우에도 이 예외가 발생합니다.

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

취소 토큰이 취소되었습니다. 이 예외는 반환된 작업에 저장됩니다.

적용 대상