오늘 조금더 테스트를 해보니 상태방에서 비정상적으로 소켓을 종료하였을 때 Sn_SSR값이 0x10으로 읽어 집니다.
테스트를 해본 컴퓨터는 2대인데 각각 win7, winXP 입니다.
윈도우에서 테스트에 사용한 소켓 프로그램은 win7 VS2010 환경에서 빌드한 소켓 프로그램입니다.
win7에서 비정상적인 종료를 하였을때 아래와 같이 수행 되며 정상적 입니다.
- 인터럽트 발생 그때 각각의 값은 Sn_IR : 0x02, Sn_SSR : 0x00
- 오픈 명령 수행 Sn_CR = 0x01
- Sn_SSR 값 0x13 확인
- 커넥트 명령 수행 Sn_CR = 0x04
- 수초 후 타임아웃 인터럽트 발생 Sn_IR : 0x08, Sn_SSR : 0x00
- 다시연결 될때까지 2, 3, 4, 5 반복 상대방과 연결이 되면 정상 동작
winXP에서 비정상적인 종료를 하였을때 아래와 같이 수행 되며 비정상적 입니다.
위의 4번 까지는 동일함
5. 거의바로 1초내로 타임아웃 인터럽트 발생 Sn_IR : 0x08, Sn_SSR : 0x00
6. 2, 3, 4 수행 후 바로 Sn_SSR 레지스터를 읽었을때 값 0x00
7. 1~2초후 Sn_SSR 레지스터를 읽었을때 값 0x10
8. Sn_SSR 레지스터를 값 0x10을 확인 후 클로즈명령 수행 Sn_CR = 0x10
9. 6, 7, 8 무한 반복됨
8번을 수행하지 않고 대기하면 인터럽트가 발생을 안합니다. 계속 Sn_SSR 레지스터를 값이 0x10 입니다.
8번에서 칩을 리셋한 후 재접속을 시도하면 정상적으로 동작합니다.
이전 질문에서 소켓 클로즈명령을 수행할 경우 리셋과 같은 효과라고 하였는데 칩리셋 과 소켓 클로즈시에 각각 다른 현상이 나옵니다.
Sn_SSR값이 0x10일 경우가 확실히 발생합니다. Sn_SSR값이 0x10일 경우 처리 방법에 대해서 문의 드립니다.