파일전송 프로그램만들때...
서버 IOCP사용...
작은 용량의 파일전송시에는 아무런 문제가 없었다...
그러나 5MB가 넘어가는 파일 전송시 어느 순간 CreateFile하면 ERROR_ACCESS_DENIED Return Code가 넘어온다...
한번에 들어온 패킷을 처리하기전에 패킷이 두번연속 들어와서 생기는 문제였다...
첫번째 시도...
받은 패킷을 큐에 차곡차곡 쌓아두고 패킷처리루틴에서 하나씩 빼서 쓴다...
그래도 여전히 같은 문제가 발생했다...
보내는 쪽에서 파일 패킷을 보낼때마다 Sleep( 100 )을 하면 아무런 문제없이 잘 되었다...
문제는 받는 쪽에서 처리하기도 전에 보낸다는게 문제였다...
그런데 Sleep( 100 )을 걸어버리면...
파일을 전송하는데 시간이 너무 많이 걸린다는것이다...
이 문제로 솔직히 4일간 삽질했다...
처음엔 문제를 파악하는데 하루...
연속패킷때문이라는것을 알고 패킷을 큐에 넣고 빼는 루틴적용하는데 하루...
(스파게티소스로인해...ㅡ.ㅡ;;)
여전히 같은 문제라는걸 파악한후 해결방법을 생각하고 적용하는데 하루...
보내는쪽에서 패킷보내고 Recv() 대기상태...
받는쪽에서 패킷받는것 성공하면 Send()...
이 구조로 바꿨으나 역시 해결안됨...
여기서 미쳐버리는줄 알았으나...
받는쪽에서 패킷받는것 성공하면 Send() 하던것을...
패킷받고 처리가 끝나면 Send()로 대략 코딩 네줄 아래로 옮겼더니...
드디어 성공...
해결하고 너무너무 허탈하고 이게 무슨 삽질인가 정말 나한테 욕이 나온다...
역시 사람은 머리가 안돌아갈때는 하루고 이틀이고 그냥 푹 쉬어줘야 한다는 결론이 나왔다...
왜냐고???
Recv() Send() 구조로 바꾸고난 그날 당직을 섰다...
밤새 삽질하다가 다음날 하루종일 집에서 잠만잤다...
당직으로 인한 피로누적... (아침 10시출근 -> 다음날 11시 퇴근)
실제 깨어있던시간 아침 8시 -> 다음날 오후 5시 30분...
이래서 오후 5시 30분부터 다음날 아침 8시까지 푹잤다...
그리고 오늘 아침 출근해서 바로 문제 해결...ㅡ.ㅡ;;
뭔가 더 효율적인 구조를 만들 수 있겠지만...
여기에 투자한 시간이 너무 많이 걸려서 우선은 이상태로 만족할란다...
프로그램 다 만들고나면 그때 다시 효율적인 구조로 바꾸도록 생각해 볼란다...
코딩중 꼬여서 안풀리는 당신...
그냥 자라...!!!
'Development > 삽질의 추억' 카테고리의 다른 글
fatal error C1010 (0) | 2011.08.13 |
---|---|
DISTINCT 사용하기... (0) | 2011.08.13 |
CreateFile(), WriteFile() 사용 시 파일 끝에서 부터 쓰기 (0) | 2011.08.13 |
CDatabase, CRecordset 사용해서 ODBC 연결 시 레코드셋 바인딩(MFC) (0) | 2011.08.13 |
C1001: internal compiler error C1001: file "msc1.cpp" line 2701 (0) | 2011.08.13 |