연결 설정 및 중단
WSAAccept 함수를 사용하면 애플리케이션이 들어오는 연결 요청을 수락할지 여부를 결정하기 전에 호출자 식별자 및 서비스 품질과 같은 호출자 정보를 가져올 수 있습니다. 이 작업은 애플리케이션에서 제공하는 조건 함수에 대한 콜백을 사용하여 수행됩니다.
WSAConnect 함수의 매개 변수로 지정된 사용자 간 데이터와 WSAAccept의 조건 함수는 서비스 공급자가 지원하는 경우 연결 설정 중에 피어로 전송할 수 있습니다.
또한 연결 해제 시 엔드포인트 간에 사용자 데이터를 교환할 수 있습니다(이를 지원하는 프로토콜의 경우). 해체를 시작하는 끝은 WSASendDisconnect 함수를 호출하여 더 이상 데이터를 보내지 않음을 나타내고 연결 중단 시퀀스를 시작할 수 있습니다. 특정 프로토콜의 경우, 해체의 일부는 해체 개시자로부터 연결 끊기 데이터를 전달하는 것입니다. 원격 엔드가 해체를 시작했다는 알림을 받은 후(일반적으로 FD_CLOSE 표시에 의해) WSARecvDisconnect 함수를 호출하여 연결 끊기 데이터를 수신할 수 있습니다(있는 경우).
데이터 연결 끊기를 사용하는 방법을 설명하려면 다음 시나리오를 고려하세요. 클라이언트/서버 애플리케이션의 클라이언트 절반은 소켓 연결을 종료해야 합니다. 종료와 동시에 서버에서 처리한 총 트랜잭션 수를 제공합니다(연결 끊기 데이터 사용). 서버는 모든 클라이언트에서 처리한 누적 총 트랜잭션 수로 응답합니다. 호출 및 표시의 시퀀스는 다음과 같이 발생할 수 있습니다.
클라이언트 쪽 | 서버 쪽 |
---|---|
(1) WSASendDisconnect 를 호출하여 세션을 종료하고 트랜잭션 합계를 제공합니다. | |
(2) WSARecv에서 반환 값이 0인 FD_CLOSE, recv 또는 WSAEDISCON 오류 반환이 정상적으로 종료되었음을 나타냅니다. | |
(3) WSARecvDisconnect 를 호출하여 클라이언트의 트랜잭션 합계를 가져옵니다. | |
(4) 모든 트랜잭션의 누적 총합계를 계산합니다. | |
(5) WSASendDisconnect 를 호출하여 총합계를 전송합니다. | |
(6) FD_CLOSE 표시를 받습니다. | (5a) closesocket을 호출합니다. |
(7) WSARecvDisconnect 를 호출하여 누적 총 트랜잭션을 수신하고 저장합니다. | |
(8) closesocket 호출 |
단계(5a)는 단계(5)를 따라야 하지만 단계(6), (7) 또는 (8)와 타이밍 관계가 없습니다.