반응형

win32 18

UDP, recvfrom()에서 WSAECONNRESET(10054) 에러 날 때...

recvfrom(...)에서 WSAECONNRESET(10054)에러가 나오면, 열라 황당하죠... 왜냐하면 10054의 의미는 ICMP Port Unreachable이라는 것인데, recvfrom은 내 소켓에서 데이터를 받는 것이니 왠? Unreachable? UDP에서 WSAECONNREST? WSAECONNRESET은 해당코드가 TCP에서의 에러일 떄의 의미를 이야기 하는 것이고 UDP소켓에서의 이유는 아래와 같이 MSDN에서 나와 있습니다. " On a UDP-datagram socket this error indicates a previous send operation resulted in an ICMP Port Unreachable message. " 뭐, 간단히 해석하자면 "먼저번 Send(..

SetEvent(..) & 멀티쓰레드 버그

꽤나 재미있는 버그였다... int tst; //Thread#1 ... WaitForSingleObject(...); printf("%d", tst); ... //Thread#2 ... tst=3; SetEvent(...); tst=4; ... 이 상황에서 Thread#1이 Thread#2를 기다리다가 tst값을 찍을 경우, 찍히는 값은 3일까? 4일까? 이 코드는 전형적으로 시그널을 기다리는 코드로 Thread#1이 Thread#2의 시그널을 기다리고 있다. 그런데 중요한 것은 OS동작이다. 흔희 생각할수 있는, SetEvent(...) 호출한 후의 Context Switching은 바로 일어나지 않을 수도 있다. 이런경우 일정량 만큼 SetEvent(...) 이후의 코드가 실행되다가 Context S..

Win32 과연 어떤 Timer함수를 사용할 것인가?

이 글은 Code Project에 있는 Timers Tutorial을 정리한 것입니다. 우선, 윈도우는 윈도우 CE를 제외하면 리얼타임OS가 아닌 관계로 10ms와 같은 매우 작은 시간에 대한 정확한 처리를 요구하는 건 한계가 있답니다. (쥔장도 자세한 이유는 잘... 흠...) QueryPerformanceFrequency나 QueryPerformanceCounter와 같은 경우는 특정 시간 경과 후 이벤트를 처리하는 것이 주요 쓰임이 아니라 시간과 시간사이의 시간차를 계산하는 것이 주요 쓰임인 관계로 이 글에서는 언급되어 있지 않습니다. 반대로 말하면 시간과 시간사이의 차이를 정확히 측정하려면 QueryPerformanceFrequency를 사용하여야 겠죠? 1. Standard Win32 Timer..

First Chance Exception

SEH(Structured Exception Handler)가 처리하는 Structured Exception을 처리하는 과정에서 디버거가 제공해 주는 정보의 일종입니다. 제가 이해한 동작 메카니즘은 아래와 같습니다. 1. Exception 발생 2. 발생된 Exception 인식 3. First Chance Exception 메세지 발생 4. Exception Handling 5. if {Exception이 정상 처리?} 프로그램 계속 동작 else Second Chance Exception 메세지 발생 //Release모드로 컴파일되어서 작동시 프로그램 Crash를 의미함 내용을 읽다보면 이 API가 Win32API를 의미하는 것인지 유저가 만든 API를 의미하는 것인지 조금 모호하기는 합니다. 즉, ..

반응형