연결 수락(Windows 소켓 2)
소켓이 연결을 수신 대기하면 프로그램에서 해당 소켓의 연결 요청을 처리해야 합니다.
소켓에서 연결을 허용하려면
클라이언트에서 연결을 수락하기 위해 ClientSocket이라는 임시 SOCKET 개체를 만듭니다.
SOCKET ClientSocket;
일반적으로 서버 애플리케이션은 여러 클라이언트의 연결을 수신 대기하도록 설계되었습니다. 고성능 서버의 경우 일반적으로 여러 스레드를 사용하여 여러 클라이언트 연결을 처리합니다.
여러 클라이언트 연결을 수신 대기하는 데 사용할 수 있는 Winsock을 사용하는 여러 가지 프로그래밍 기술이 있습니다. 한 가지 프로그래밍 기술은 수신 대기 함수를 사용하여 연결 요청을 확인하는 연속 루프를 만드는 것입니다( 소켓에서 수신 대기 참조). 연결 요청이 발생하는 경우 애플리케이션은 accept, AcceptEx 또는 WSAAccept 함수를 호출하고 작업을 다른 스레드에 전달하여 요청을 처리합니다. 다른 여러 프로그래밍 기술이 가능합니다.
이 기본 예제는 매우 간단하며 여러 스레드를 사용하지 않습니다. 또한 이 예제에서는 단일 연결만 수신 대기하고 허용합니다.
ClientSocket = INVALID_SOCKET; // Accept a client socket ClientSocket = accept(ListenSocket, NULL, NULL); if (ClientSocket == INVALID_SOCKET) { printf("accept failed: %d\n", WSAGetLastError()); closesocket(ListenSocket); WSACleanup(); return 1; }
클라이언트 연결이 수락되면 서버 애플리케이션은 일반적으로 수락된 클라이언트 소켓(위의 샘플 코드의 ClientSocket 변수)을 작업자 스레드 또는 I/O 완료 포트에 전달하고 추가 연결을 계속 수락합니다. 이 기본 예제에서 서버는 다음 단계를 계속합니다.
여러 연결을 수신 대기하고 수락하는 데 사용할 수 있는 여러 가지 다른 프로그래밍 기술이 있습니다. 여기에는 select 또는 WSAPoll 함수 사용이 포함됩니다. 이러한 다양한 프로그래밍 기술 중 일부의 예는 Microsoft Windows SDK(소프트웨어 개발 키트)에 포함된 고급 Winsock 샘플 에 설명되어 있습니다.
참고
Unix 시스템에서 서버에 대한 일반적인 프로그래밍 기술은 애플리케이션이 연결을 수신 대기하는 것이었습니다. 연결이 수락되면 부모 프로세스는 포크 함수를 호출하여 클라이언트 연결을 처리하는 새 자식 프로세스를 만들고 부모로부터 소켓을 상속합니다. 포크 함수는 지원되지 않으므로 이 프로그래밍 기술은 Windows에서 지원되지 않습니다. 새 프로세스를 만드는 데 필요한 리소스가 스레드에 필요한 리소스보다 훨씬 크므로 이 기술은 일반적으로 고성능 서버에 적합하지 않습니다.
다음 단계: 서버에서 데이터 수신 및 보내기
관련 항목