winsock select 예제

이 문서는 IOCP에 내 기사의 연속이다. 이 문서에서는 확장 가능한 클라이언트/서버 응용 프로그램을 만들기 위해 I/O 완료 포트를 사용하는 방법을 설명했습니다. 이 문서에서는 select() 함수를 사용하여 확장 가능한 클라이언트/서버 응용 프로그램을 만드는 방법을 설명합니다. 이 구현에서 클라이언트와 서버는 간단한 문자열 메시지를 보내고 표시합니다. WSAStartup 실패 10의 경우 호출할 수 있는 Winsock 2.2 DLL에서. 다음으로 링커 폴더를 확장하고 입력 링크를 선택합니다. 추가 종속성 옵션의 경우 오른쪽빈 필드의 끝에 있는 타원을 클릭합니다. 매개 변수 시간 정은 선택완료에 걸리는 시간을 제어합니다. 시간 시간이 null 포인터인 경우 하나 이상의 설명자가 지정된 기준을 충족할 때까지 선택이 무기한 차단됩니다. 그렇지 않으면 시간 제한은 반환하기 전에 선택해야 하는 최대 시간을 지정하는 TIMEVAL 구조를 가리킵니다. select가 반환되면 TIMEVAL 구조의 내용은 변경되지 않습니다. TIMEVAL이 {0, 0}으로 초기화되면 select가 즉시 반환됩니다. 선택한 소켓의 상태를 폴링하는 데 사용됩니다.

select가 즉시 반환되면 선택 호출이 비차단으로 간주되고 비차단 호출에 대한 표준 가정이 적용됩니다. 예를 들어 차단 후크가 호출되지 않으며 Windows 소켓이 생성되지 않습니다. 그래서이 게시물에서 우리는 winsock API를 사용하여 창에 소켓 서버를 작성하는 방법을 볼 수 있습니다. Winsock는 창의 소켓 API이며 소켓 말하기 응용 프로그램을 작성하는 데 사용할 수 있습니다. 코드는 C에 있어야 합니다. 다음은 AcceptConnections() 함수입니다. 이 함수는 select()를 사용하여 소켓을 모니터링합니다. 또한 소켓의 상태에 따라 처리됩니다. 9. 구성 폴더 확장 > C/C++ 하위 폴더를 확장합니다. 고급 링크를 선택하고 컴파일로 컴파일 옵션을 선택하여 C 코드(/TC)로 컴파일을 선택합니다. 이제 select 함수가 반환되면 동일한 readfds 배열을 읽을 수 있는 소켓으로 다시 채웁니다.

쓰기 및 제외fds와 동일합니다. 즉, 루프에서 select 함수를 계속 호출해야하며, 매번 전달할 소켓 배열, 쓰기 및 제외 된 목록목록을 준비해야합니다. TIMEVAL 구조의 형태로 제공되는 선택 대기 시간입니다. 차단 작업에 대해 시간 설정 매개 변수를 null로 설정합니다. 특정 소켓에 오류를 얻기 위해 GetSocketSpecificError() 함수를 만들었습니다. select()로 작업할 때는 여러 소켓에 오류가 있을 수 있으므로 WSAGetLastError()를 사용할 수 없으며 소켓에 특정 오류가 필요합니다. select() 함수는 동기 소켓에서 작동하며 스레드를 만들 필요가 없습니다. 폴링과 같은 다른 기술이 있습니다. 폴링은 여러 소켓을 모니터링하여 “무언가”가 발생했는지 확인하는 것입니다.

예를 들어 서버는 연결된 5개의 클라이언트의 소켓을 모니터링할 수 있으며, 그 중 어느 클라이언트가 메시지를 보내자마자 서버가 이벤트에 대한 알림을 받은 다음 처리합니다. 이러한 방식으로 여러 소켓을 처리할 수 있습니다. winsock API는 일부 활동에 대해 여러 소켓을 모니터링할 수 있는 “select”라는 함수를 제공합니다. printf (서버 : DLL은 Winsock 버전 %u.% u!n, LOBYTE (wsaData.wVersion), HIBYTE (wsaData.wVersion)를 지원하지 않습니다. 요약하면, 선택 함수가 fd_set 구조에 준비되어 포함된 총 소켓 핸들 수를 반환하고, 시간 제한이 만료된 경우 0, 오류가 발생한 경우 SOCKET_ERROR를 반환합니다. . 반환 값이 SOCKET_ERROR인 경우 WSAGetLastError를 사용하여 특정 오류 코드를 검색할 수 있습니다.

2nd August 2019 Uncategorized