반응형

전체 글 237

Overlapped I/O Note #1

accept 1) backlog를 충분히 잡는다. 2) Win32 - AcceptEx a. What a) accept(..)가 Pending되며 1byte이상이 수신되었을 때 완료된다. b) 성능상의 이유로 AcceptEx에 할당된 커널모드 구조체는 소켓이 연결되었거나 listening socket이 닫히고 난후에 제거할 수 있다. b. How To Use a) 미리 생성된 socket을 accpet(..)에 걸어놓는다. b) 최대치의 개수를 정해놓고 일정수의 AcceptEx를 항상 걸어놓는다. c) 연결만을 걸어놓는 악의적인 접속이나 유효하지 않은 접속을 대비하기 위하여 getsockopt(SO_CONNECT_TIME)을 이용하여 주기적으로 소켓을 검사한다. d) AcceptEx호출이 값비싼 호출이기 ..

Fiber [beta]

파이버는 아래와 같은 단점을 가지고 있습니다.... 우선 처리가 적절하게 끝나야 합니다. 적절하게 끝나지 못하고 중간에서 Fiber Context Switching이 된 상태에서 끝나게 된 경우, 해당 Fiber Context에서 돌아가던 변수들이 클리어 되지 않습니다. 이것 때문에 애 먹었습니다. Compuware Error Detection으로 체크하는데 갑자기 Memory Leak과 Resource Leak이 나와 체크하였는데 결과적으로 실행하다가 프로그램 종료와 함께 종료된 Fiber Context에서 선언되고 사용되어진 Class들의 d'tor가 호출되지 않았습니다. 쩝... Thread관련 클래스에는 이상없이 클리어 되던 얘들인데... (상세한 조사는 하지 않고 버그만을 수정하였습니다.) --..

TCP Note #2 Gracefully Close(..)

From Chapter 6 내부구조, TCP/IP The Pocket Guide to TCP/IP Sockets C, MSDN closesocket function[winsock], 'Graceful Shutdown, Linger Options, and Socket Closure', NetworkProgramming For Microsoft Windows What? Gracefully Close란 TCP에서 4way-handshake를 정상으로 마친 그러니까 서로 FIN, ACK를 주고 받고 연결이 종료된 상태이다. Why Important? 이 Gracefully Close를 통하여 소켓의 close(..)를 호출한 쪽은 자신이 보내고자 하는 데이터가 정상적으로 상대편에 다 도착했음을 보장받는다. 이는..

TCP & UDP Note #1

From Chapter 6 내부구조, TCP/IP The Pocket Guide to TCP/IP Sockets C, MSDN, NetworkProgramming For Microsoft Windows Socket 소켓구조체 1) 내부의 소켓구조와 링크된 일종의 핸들(Handle) 2) 지역 및 원격 인터넷 주소와 포트, SendQueue, RecvQueue, TCP연결관련상태정보 TCP 1. Defensive Programming 1) Deadlock n bytes를 send(...)할 때, n=source SendQ size + destination RecvQ size + remained size n>source SendQ size + destination RecvQ size 클 경우 보낸 호스트는 ..

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(..

TCP/IP에 대한 유용한 글 모음

TCP Segment: http://en.wikipedia.org/wiki/TCP_segment, http://www.linktionary.com/s/segment_tcp.html 자칫 햇갈릴 수도 있는 TCP Segment에 대한 정의가 나와 있는 글들... TCP Sliding Window: http://forgarden.tistory.com/113 TCP 슬라이딩 윈도우에 대한 설명이 쉽게 나와 있는 글... TCP Window Size의 크기에 따른 영향: http://forgarden.tistory.com/114 TCP의 Window Size의 크기가 성능에 어떤 영향을 미치는지 나와 있습니다.

[링크] 주요 소프트 및 패치 다운로드 (지속적 업데이트)

Office 2003 SP3: http://www.microsoft.com/downloads/details.aspx?familyid=E25B7049-3E13-433B-B9D2-5E3C1132F206&displaylang=ko Word, Excel 및 PowerPoint 2007 파일 형식용 Microsoft Office 호환 기능 팩: http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=941B3470-3AE9-4AEE-8F43-C6BB74CD1466 오피스XP, 2003에서 오피스2007 파일을 사용하게 해주는 호환기능팩입니다. Word, Excel 및 PowerPoint 2007 파일 형식용 Microsoft Office 호..

링크 2009.04.29

LUA Script

Lua는 가벼운 인터프린터 언어로 쉽고 가볍게 C/C++에 내장된(Embeded)다는 장점을 가지고 있으며, WOW의 유저UI용 스크립트 언어로도 유명하다. 많은 MMORPG용 서버엔진에서도 사용한다. 물론, 언어로는 메타, 멀티리턴값 같은 조금은 독특하고 머리아픈 기능도 가지고 있다. LUA v 5.1 Reference Manual http://www.lua.org/manual/5.1 루아 공식홈페이지 http://www.lua.org 루아 레드위키 http://www.redwiki.net/wiki/wiki.php/Lua 루아 사용자 모임 http://lua-users.org C# & Lua http://www.gamedev.net/reference/articles/article2275.asp http..

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를 의미하는 것인지 조금 모호하기는 합니다. 즉, ..

C++ 헤더파일에 선언할 수 있는 4가지 타입의 전역변수

최근에 헤더파일에서의 static 전역변수에 대한 포스트를 올렸다 지웠습니다. 생각지도 못한 버그를 만나 2시간이나 고생을 했기 때문이었는데, C/C++에서의 static 키워드는 여러모로 조심스러운 키워드인거 같습니다. 멀티쓰레드에서의 버그가능성까지... 이 글은 덕분에 테스트해 본 전역변수에 대하여 요약하여 놓은 것입니다. 참고로 테스트 환경은 Visual Studio 2008 sp1 입니다. object라는 클래스가 있다는 가정하에 헤더파일에 선언할 수 있는 4가지 타입의 전역변수는 아래와 같습니다. 1. object var; 2. static object var; 3. extern object var; //object var;라고 특정 cpp파일에 정의되어 있다고 가정합니다. 4. typedef ..

C++ 프로그래밍 2009.04.21
반응형