, 당신은 조건부 동의 메커니즘을 사용할 수 있습니다 :
이만큼 자동으로 들어오는 SYN 패킷에
SYN-ACK 답장을 보낼 수있는 스택의 동작을 변경
SOCKET sd = socket(...);
listen(sd, ...);
DWORD nTrue = 1;
setsockopt(sd, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (char*)&nTrue, sizeof(nTrue));
연결 백 로그 공간을 사용할 수 있습니다. 대신 프로그램은 정상적으로 연결을 받아 들여야한다는 신호를받습니다 - select(), WSAEventSelect(), WSAAsyncSelect() ...- 당신은) (WSAAccept를 (전화) 대신의 동의 :
sockaddr_in sin;
WSAAccept(sd, (sockaddr*)&sin, sizeof(sin), ConditionalAcceptChecker, 0);
당신은 들어오는 연결 정보를보고 연결을 허용할지 여부를 결정하는 기능 ConditionalAcceptChecker()를 작성합니다. 귀하의 경우에는 이미 연결을 처리하는 동안에 만 CF_REJECT
을 반환 할 수 있습니다.
이 메커니즘은 Winsock 2에만 해당됩니다. 이식 가능한 동작이 필요한 경우 프로그램에 이미 연결되어있는 동안 다른 게시물의 청취 소켓을 닫는 것이 좋습니다.
좋은 답변, 워렌 영. ur 시간과 답장을 보내 주셔서 감사합니다. – immi
니스, 나는 그것에 대해 잊어 버렸습니다 :) 클라이언트가 서버가 연결을 거부하면 무엇을 보게됩니까? TCP 수준에서 –
RST, Winsock 수준에서 WSAECONNREFUSED. –