안녕하세요..
제가 만들고 있는 Application은 서버와 연결이 끊어지게 되면 10초마다
다시 연결을 시도하도록 하였습니다..
Server Application에 죽었을 경우, TClientSocket의 OnDisconnected Event에서
Timer Component를 10초로 하여 Enable 시키고 Timer Event가 발생했을때,
다시 소켓을 연결하도록하였습니다..
문제는..
Server Application에 죽었을 경우, TClientSocket의 OnDisconnected Evnt가
발생하게 되는데, 이때 socket의 connected property를 보면 True로 되어 있습니다..
그리고 서버측에서 netstat를 보면 fin_wait_2상태이구요..
그래서.. Timer Event가 발생하여 소켓을 연결하게 되면 이전의 소켓이 완전히
연결이 끊어지지 않은 것으로 되어 있어서 새로이 연결을 하지 못합니다..
그래서 OnDisconnected Event가 발생하면..
socket.connected property를 검사하여 True이면 socket.close를 하도록 시도해 봤습니다..
근데 이렇게 하니 stack overflow가 발생하는군요..
서버와 연결이 끊어지게 되면 소켓의 완전히 연결해제하고 10초후에
다시 연결을 재 시도하도록 하려 합니다..
좋은 답변 부탁드립니다..
테스트 해보지는 못했지만 그것도 괜찬지 않을까 하는 생각이 듭니다.
강신구 wrote:
> 안녕하세요..
>
> 제가 만들고 있는 Application은 서버와 연결이 끊어지게 되면 10초마다
>
> 다시 연결을 시도하도록 하였습니다..
>
> Server Application에 죽었을 경우, TClientSocket의 OnDisconnected Event에서
>
> Timer Component를 10초로 하여 Enable 시키고 Timer Event가 발생했을때,
>
> 다시 소켓을 연결하도록하였습니다..
>
> 문제는..
>
> Server Application에 죽었을 경우, TClientSocket의 OnDisconnected Evnt가
>
> 발생하게 되는데, 이때 socket의 connected property를 보면 True로 되어 있습니다..
>
> 그리고 서버측에서 netstat를 보면 fin_wait_2상태이구요..
>
> 그래서.. Timer Event가 발생하여 소켓을 연결하게 되면 이전의 소켓이 완전히
>
> 연결이 끊어지지 않은 것으로 되어 있어서 새로이 연결을 하지 못합니다..
>
> 그래서 OnDisconnected Event가 발생하면..
>
> socket.connected property를 검사하여 True이면 socket.close를 하도록 시도해 봤습니다..
>
> 근데 이렇게 하니 stack overflow가 발생하는군요..
>
> 서버와 연결이 끊어지게 되면 소켓의 완전히 연결해제하고 10초후에
>
> 다시 연결을 재 시도하도록 하려 합니다..
>
> 좋은 답변 부탁드립니다..