Socket.AcceptAsync 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
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
매개 변수
이 비동기 소켓 작업에 사용할 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 들어오는 연결에 사용할 기존 Socket 을 SocketAsyncEventArgs.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.SocketAsyncEventArgs 값 SocketAsyncEventArgs.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이 닫혔습니다.
취소 토큰이 취소되었습니다. 이 예외는 반환된 작업에 저장됩니다.
적용 대상
.NET