GPRS Connection Closing Immediately
Windows Mobile 5.0 이후에 RasDial()을 통한 접속이 되지 않아 Connection Manager를 사용하여 연결하였다. 연결은 ConnMgrEstablishConnection()을 이용하여 원할하게 접속하였으나, ConnMgrReleaseConnection()을 통해 연결을 끊을 수 없었다. ConnMgrReleaseConnection()는 RasHangUp()과는 달리 바로 연결을 끊는 것이 아니라 단지 App에서 해당 Connection의 사용이 끝났다는 것을 Connection Manager에게 알리는 것을 확인하였다. 이를 해결하기 위한 방법에는 두 가지가 있다.
1. CONNMGR_CONNECTIONINFO struct의 bExclusive 값을 TRUE로 셋팅하는 것.
bExclusive의 값에 따라 현재 Connection Manager를 통해 연결을 한 Application이 다른 Application들과 연결을 공유할 것인지를 결정하게 된다. 이를 TRUE로 설정하면 연결을 공유하지 않고 독점적으로 사용하게 되고 ConnMgrReleaseConnection()를 통해서 연결을 끊을 수 있다. 하지만 이는 다른 프로그램에서 연결을 하여 사용하게 되면 사용권은 다른 Application으로 넘어가고 연결이 끊어지게 되는 단점이 있다. 따라서 FALSE를 설정하여 사용하는 것이 좋으며 FALSE설정시 RasEnumConnection()과 RasHangUp()을 사용하여 연결을 끊는 방법이 있으나 이는 단말에 적용되지 않았다.
2. 레지스트리를 수정하는 방법입니다.
<디렉토리> HKEY_LOCAL_MACHINE\Comm\ConnMgr\Planner\Settings\
<기존> SuspendResume = ~GPRS!
<수정> SuspendResume = GPRS_bye_if_device_off
다음의 항목을 수정함으로써 bExclusive의 값이 FALSE로 설정되어도 ConnMgrReleaseConnection()을 이용하여 연결을 종료시키는 것을 자유롭게 할 수 있으며 프로그램 종료시 연결을 자동으로 종료시킬 수 있다.
2번의 방법으로 연결을 종료시키는 것을 적용시키는 것이 당연히 좋다