Socket.AcceptAsync 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
| Name | Description |
|---|---|
| AcceptAsync() |
들어오는 연결을 허용합니다. |
| AcceptAsync(Socket) |
들어오는 연결을 허용합니다. |
| AcceptAsync(SocketAsyncEventArgs) |
들어오는 연결 시도를 수락하는 비동기 작업을 시작합니다. |
| AcceptAsync(CancellationToken) |
들어오는 연결을 허용합니다. |
| AcceptAsync(Socket, CancellationToken) |
들어오는 연결을 허용합니다. |
AcceptAsync()
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
- 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) 호출해야 합니다.
소켓에 액세스하려고 할 때 오류가 발생했습니다.
Socket 닫혔습니다.
설명
이 메서드는 메서드의 동기 대응이 throw할 수 있는 모든 비사용 예외를 반환하는 작업에 저장됩니다. 예외가 반환된 작업에 저장되면 태스크가 대기될 때 해당 예외가 throw됩니다. ArgumentException같은 사용 예외는 여전히 동기적으로 던져집니다. 저장된 예외는 .에 의해 Accept()throw된 예외를 참조하세요.
적용 대상
AcceptAsync(Socket)
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
- 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) 호출해야 합니다.
소켓에 액세스하려고 할 때 오류가 발생했습니다.
Socket 닫혔습니다.
적용 대상
AcceptAsync(SocketAsyncEventArgs)
- Source:
- Socket.cs
- Source:
- Socket.cs
- 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
매개 변수
이 SocketAsyncEventArgs 비동기 소켓 작업에 사용할 개체입니다.
반환
true I/O 작업이 보류 중인 경우
Completed 매개 변수의 e 이벤트는 작업이 완료되면 발생합니다.
false I/O 작업이 동기적으로 완료된 경우
Completed 매개 변수에 e 대한 이벤트가 발생하지 않으며 메서드 호출이 반환된 e 직후 매개 변수로 전달된 개체를 검사하여 작업 결과를 검색할 수 있습니다.
예외
인수가 잘못되었습니다. 이 예외는 제공된 버퍼가 충분히 크지 않은 경우에 발생합니다. 버퍼는 2 * (sizeof(SOCKADDR_STORAGE + 16)) 바이트 이상이어야 합니다.
이 예외는 여러 버퍼가 지정된 경우에도 발생하며 속성이 BufferList null이 아닙니다.
인수가 범위를 벗어났습니다. 예외는 0보다 작은 경우에 Count 발생합니다.
잘못된 작업이 요청되었습니다. 이 예외는 수락 Socket 이 연결을 수신 대기하지 않거나 허용된 소켓이 바인딩된 경우에 발생합니다.
메서드를 Bind(EndPoint) 호출하기 전에 및 Listen(Int32) 메서드를 AcceptAsync(SocketAsyncEventArgs) 호출해야 합니다.
이 예외는 소켓이 이미 연결되어 있거나 지정된 e 매개 변수를 사용하여 소켓 작업이 이미 진행 중인 경우에도 발생합니다.
소켓에 액세스하려고 할 때 오류가 발생했습니다.
Socket 닫혔습니다.
설명
연결 지향 프로토콜은 이 메서드를 AcceptAsync 사용하여 들어오는 연결 시도를 비동기적으로 처리할 수 있습니다. 연결을 비동기적으로 수락하면 별도의 실행 스레드 내에서 데이터를 보내고 받을 수 있습니다. 메서드를 AcceptAsync 호출하기 전에 들어오는 연결 요청을 수신 대기하고 큐에 대기하는 메서드를 호출 Listen 해야 합니다.
완료 알림을 받으려면 EventHandler<SocketAsyncEventArgs> 대리자를 구현하고 이벤트에 후크하는 콜백 메서드를 SocketAsyncEventArgs.Completed 만들어야 합니다.
개체에 대한 System.Net.Sockets.SocketAsyncEventArgs 다음 속성 및 이벤트가 필요합니다.
호출자는 필요에 따라 속성과 함께 SocketAsyncEventArgs.AcceptSocket 사용할 항목을 지정하여 Socket 들어오는 연결에 사용할 기존 Socket 항목을 지정할 수 있습니다.
속성이 SocketAsyncEventArgs.AcceptSocket null이면 새 Socket 속성이 동일한 AddressFamilySocketType값으로 생성되고 ProtocolType 현재 Socket 속성으로 설정 SocketAsyncEventArgs.AcceptSocket 됩니다.
호출자는 콜백 메서드에서 SocketAsyncEventArgs.UserToken 정보를 검색할 수 있도록 메서드를 호출 AcceptAsync 하기 전에 원하는 사용자 상태 개체로 속성을 설정할 수 있습니다. 콜백에 단일 개체보다 더 많은 정보가 필요한 경우 다른 필수 상태 정보를 멤버로 유지하기 위해 작은 클래스를 만들 수 있습니다.
필요에 따라 메서드가 성공한 후 소켓에서 초기 데이터 블록을 받을 버퍼가 ConnectAsync 제공될 수 있습니다. 이 경우 SocketAsyncEventArgs.Buffer 속성을 수신할 데이터가 포함된 버퍼로 설정해야 하며 SocketAsyncEventArgs.Count , 이 속성은 버퍼에서 받을 데이터의 최대 바이트 수로 설정해야 합니다. 이러한 속성은 메서드를 SocketAsyncEventArgs.SetBuffer 사용하여 설정할 수 있습니다. 전달된 버퍼의 일부는 내부적으로 기본 Winsock AcceptEx 호출에서 사용하기 위해 소비됩니다. 즉, 반환되는 데이터의 양은 항상 제공된 인스턴스의 SocketAsyncEventArgs.Count 속성 System.Net.Sockets.SocketAsyncEventArgs 값보다 작습니다. 내부적으로 사용되는 버퍼의 양은 소켓의 주소 패밀리에 따라 달라집니다. 필요한 최소 버퍼 크기는 288바이트입니다. 더 큰 버퍼 크기를 지정 Socket 하면 Winsock AcceptEx 호출에서 받은 주소 데이터 이외의 일부 추가 데이터가 예상되며 이 추가 데이터가 수신될 때까지 대기합니다. 시간 제한이 발생하면 연결이 다시 설정됩니다. 따라서 추가 데이터가 특정 양으로 예상되는 경우 버퍼 크기를 최소 버퍼 크기와 이 양으로 설정해야 합니다.
완료 콜백 메서드는 작업이 성공했는지 AcceptAsync 확인하기 위해 속성을 검사 SocketAsyncEventArgs.SocketError 해야 합니다.
이 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
- 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) 호출해야 합니다.
소켓에 액세스하려고 할 때 오류가 발생했습니다.
Socket 닫혔습니다.
취소 토큰이 취소되었습니다. 이 예외는 반환된 작업에 저장됩니다.
설명
이 메서드는 메서드의 동기 대응이 throw할 수 있는 모든 비사용 예외를 반환하는 작업에 저장됩니다. 예외가 반환된 작업에 저장되면 태스크가 대기될 때 해당 예외가 throw됩니다. ArgumentException같은 사용 예외는 여전히 동기적으로 던져집니다. 저장된 예외는 .에 의해 Accept()throw된 예외를 참조하세요.
적용 대상
AcceptAsync(Socket, CancellationToken)
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
- 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) 호출해야 합니다.
소켓에 액세스하려고 할 때 오류가 발생했습니다.
Socket 닫혔습니다.
취소 토큰이 취소되었습니다. 이 예외는 반환된 작업에 저장됩니다.