다음을 통해 공유


Winsock 커널 함수 및 이벤트 콜백 함수 사용

특정 소켓 작업의 경우 Winsock 커널(WSK) 애플리케이션은 소켓의 WSK 함수 중 하나를 호출하여 작업을 수행하거나 작업과 연결된 이벤트가 발생할 때 WSK 하위 시스템이 호출하는 소켓에서 이벤트 콜백 함수를 구현하고 사용하도록 설정할 수 있습니다. 예를 들어 연결 지향 소켓에서 데이터를 수신할 때 WSK 애플리케이션은 소켓의 WskReceive 함수를 호출하거나 소켓에서 WskReceiveEvent 이벤트 콜백 함수를 구현하고 사용하도록 설정할 수 있습니다. WSK 애플리케이션의 요구 사항에 따라 애플리케이션에서 사용해야 하는 메서드가 결정됩니다. 두 메서드를 사용하는 방법에 대한 예제는 WSK 설명서 전체에서 제공됩니다.

다음 목록에서는 각 메서드에 대한 몇 가지 핵심 사항을 요약합니다.

Winsock 커널 함수 사용

  • WSK 애플리케이션은 소켓 작업을 구동합니다. 즉, 소켓 작업이 발생할 때 WSK 애플리케이션이 제어합니다. 이렇게 하면 WSK 애플리케이션에 필요한 동기화가 간소화될 수 있습니다.

  • WSK 애플리케이션은 소켓 함수에 IRP를 제공합니다. 이러한 IRP는 소켓 작업이 완료될 때까지 WSK 하위 시스템에 의해 큐에 대기됩니다. WSK 함수에서 IRP를 사용하는 방법에 대한 자세한 내용은 Winsock 커널 함수에서 IRP 사용을 참조하세요.

  • WSK 애플리케이션은 WSK 하위 시스템에 의해 각 작업이 완료될 때까지 IRP를 대기하여 차단 소켓 작업을 수행할 수 있습니다.

  • WSK 애플리케이션은 연결 지향 소켓에서 고성능 데이터 전송을 보장하거나, 들어오는 데이터그램이 데이터그램 소켓에서 삭제되는 것을 방지하거나, 수신 대기 소켓에서 들어오는 연결이 끊어지는 것을 방지하기 위해 일부 상황에서 여러 소켓 작업을 큐에 대기 상태로 유지해야 할 수 있습니다.

  • WSK 애플리케이션은 데이터 전송 작업에 대한 데이터 버퍼를 제공합니다. 이렇게 하면 데이터를 복사해야 하는 횟수가 줄어듭니다. 그러나 WSK 애플리케이션이 여러 데이터 전송 작업을 큐에 대기로 유지하는 경우 애플리케이션은 큐에 대기된 각 데이터 전송 작업에 대해 WSK 하위 시스템에 데이터 버퍼를 제공해야 합니다. 따라서 WSK 애플리케이션에는 추가 메모리 리소스가 필요할 수 있습니다.

이벤트 콜백 함수 사용

  • WSK 하위 시스템은 소켓 작업을 구동합니다. 즉, WSK 하위 시스템은 소켓의 이벤트 콜백 함수를 호출하여 WSK 애플리케이션에 소켓 이벤트를 알 수 있습니다. WSK 애플리케이션은 이벤트 콜백 함수의 비동기 특성을 처리하기 위해 더 복잡한 동기화가 필요할 수 있습니다.

  • WSK 애플리케이션은 소켓 작업에 IRP를 사용하지 않습니다.

  • WSK 애플리케이션은 소켓 작업을 큐에 추가할 필요가 없습니다. WSK 하위 시스템은 소켓의 이벤트가 발생하는 즉시 WSK 애플리케이션의 이벤트 콜백 함수를 호출합니다. WSK 애플리케이션이 소켓의 이벤트 콜백 함수가 호출되는 속도를 따라갈 수 있는 경우 이벤트 콜백 함수를 사용하면 가장 높은 성능과 데이터그램 또는 들어오는 연결을 삭제할 가능성이 가장 큽니다.

  • WSK 하위 시스템은 데이터 전송 작업을 위한 데이터 버퍼를 제공합니다. WSK 애플리케이션은 WSK 하위 시스템에 메모리 리소스가 부족하지 않도록 이러한 데이터 버퍼를 즉시 또는 적절한 시간 내에 WSK 하위 시스템에 다시 릴리스해야 합니다. 따라서 WSK 애플리케이션은 WSK 하위 시스템이 소유한 데이터 버퍼의 데이터를 자체 데이터 버퍼로 복사해야 할 수 있습니다.

참고 위의 목록이 반드시 완전하지는 않습니다. 특정 WSK 애플리케이션에 가장 적합한 방법을 선택할 때 고려해야 할 다른 사항이 있을 수 있습니다.