2009/07/30

Let's Groove!





2007 HipHop World Championship, Bremen.
Small group category 1st place
Choreography by Gabor Hartmann


음악, 안무 모두 좋다.
모처럼 정말 춤추고 싶은 날이다.

이따금씩 술기운에 다음날 수업따윈 신경쓰지 않고
동방에 모여 서로 추는 춤을 비웃으며 놀던 때가 있었다.

그 때가 그립다.

2009/07/25

WinSock > setsockopt()


setsockopt(IN SOCKET socket, IN int name, IN int optlevel, IN const char* optvalue, IN int optlen);

[1] 입출력 버퍼크기의 변경

 SOCKET sock = socket(PF_INET, SOCK_STREAM, 0);
 int send_buf = 500;
 int rcv_buf = 1000;
 int state = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char*)&rcv_buf, sizeof(rcv_buf));
 if(state) errorhandling("setsockopt() error");
 state = setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char*)&send_buf, sizeof(send_buf));
 if(state) errorhandling("setsockopt() error");

[2] Nagle 알고리즘의 적용 - 한번에 모아서 전송

TCP 소켓은 기본적으로 Nagle 알고림을 사용하여 한번에 모아서 전송함. 지연 발생(100~200ms).
이 옵션 사용시 리턴과 동시에 데이터 전송이 이루어지나 회선 부하가 많아짐.

 int sock;
 int flag = 1;  // 네이글 알고리즘 off
 sock = open(...);
 if ( setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)) < 0)
 {
    printf("setsockopt error\n");
    ....
 }

[3] 송/수신 TIMEOUT 설정 - 블러킹 소켓일 경우

 SCOKET hSocket;
 int nErrorCode;
 hSocket = socket(AF_INET,SOCK_STREAM,0);
 ~~~~
 nErrorCode = connect(~~~~~~);
 ~~~
 // RECEIVE & SEND TIMEOUT 설정법
 // hSocket이 블럭킹상태(Blocking) 일경우 해당된다. 논 블럭킹 상태(None-Blocking) 이면 recv에서 SOCKET_ERROR를 반환하고
 //WSAGetLastError()로 확인 하면 WSAEWOULDBLOCK를 반환 한다. 
 //WSAEWOULDBLOCK이 에러가 아니고, 다른 에러 이면 에러 코드를 참조 하여 에러 처리를 한다. 

 // Receive Time Out Value : 3000 (약 3초)
 int nTimeOutValue = 3000;
 nErrorCode = setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO,(const char*)&nTimeOutValue,sizeof(nTimeOutValue));
 if(SOCKET_ERROR == nErrorCode)// 에러 처리
 }
 nErrorCode = setsockopt(hSocket, SOL_SOCKET, SO_SNDTIMEO,(const char*)&nTimeOutValue,sizeof(nTimeOutValue));
 if(SOCKET_ERROR == nErrorCode) // 에러 처리
 }

 nErrorCode = send(hSocket,버퍼,전송할 버퍼크기, 0);
 ~~~
 nErrorCode = recv(hSocket,버퍼, 버퍼크기, 0);
 ~~~

[4] 소켓 종료시 종료방식 설정

LINGER 구조체의 _onoff _linger 두개의 값에 플래그를 지정하고 setsockopt 에 설정
l_onoff = 0, l_linger = 0(또는 1) : 버퍼에 있는 내용을 모두 전송후 연결 종료한다.

l_onoff = 1, l_linger = 0 : 즉시 연결을 종료한다. 상대방에게는 FIN이나 RTS 시그널이 전달된다.
                l_linger = 1 : 버퍼에 있는 내용을 모두 전송후에 연결을 종료한다. 이 동안 closesocket 은 block 된다.

 LINGER opt = {onoff, linger}; // 값을 설정
 setsockopt(socket, SOL_SOCKET, SO_LINGER, (char *)&opt, sizeof(opt)); 

[5] 소켓 비정상 종료시 재 bind 를 허용하도록 함

bind 되었던 소켓이 서버의 비정상 종료로  커널이 아직 그 정보를 갖고 있을 경우, 다시금 bind 할 수 없는 경우가 있는데,
이때 선점된 주소로 인해 bind에 실패할 수 있다. 이 옵션은 재 bind 할 수 있도록 한다.

 bool reuseflag = true;
 setsockop(listen_sock, SOL_SOCKET, SO_REUSEADDR, (char *)&reuseflag, sizeof(reuseflag));

[6] UDP 소켓을 브로드캐스트 가능하도록 설정

디폴트로 생성되는 UDP소켓은 브로드캐스트가 불가능하도록 설정되어있다. 이 소켓을 브로트캐스트가 가능하도록 한다.

 // serverside
 memset(&serverAddr, 0, sizeof(serverAddr));
 serverAddr.sin_family = AF_INET;
 serverAddr.sin_addr.s_addr = inet_addr(szServerAddress);
 serverAddr.sin_port = htons(nPort); // 포트는 serverside 와 clientside 모두 통일
 state = setsockopt(hSock, SOL_SOCKET, SO_BROADCAST, (char *)&serverAddr, sizeof(serverAddr));

2009/07/24

영웅은 공부 따윈 안한다네





흥미롭군

나도 영웅이 되어 볼까 :p


2009/07/23

연극은 언젠가 끝나기 마련입니다.





라디오에서 유희열이 이런 애기를 했다.

"그 사람과 같이 있을 때 가장 나다워지는 사람과 결혼하십시요,
괜히 꾸미거나 가식적이지 않는 그냥 편안한 그대로의
나의 모습을 있는 그대로 보여줄 수 있는 상대를 만나십시요"

"연극은 언젠가 끝나기 마련입니다."



언젠간 정말 같은 꿈을 꿀 수 있을까...?


UNICODE 컴파일시 콘솔에 한글 출력하기


  1. _tprintf()

  2. 여기서 setlocale을 지정하지 않으면 프로젝트 속성 항목의
    [문자집합:설정 안함]에서는 정상적으로 한글이 나오지만
    [문자집합:유니코드 사용]에서는 한글을 볼 수 없게 된다.


  3. cout

  4. imbue함수를 통해 locale을 지정해 주면 된다.
    _Loc: A local string.
    Return Value: The Previous locale.

    예제: 이 함수는 locale객체를 인자로 받게끔 되 있는데,
    이 locale객체의 첫번째 인자는 구현하려는 locale 문자열을, 두번째 인자(생략가능)는 적용할 범위를 설정한다.
    locale::ctype으로 지정하면 문자열만, locale::all 을 지정하면 통화, 숫자등 모든 출력 값들이 시스템 국가별 설정에 영향을 받게된다.


한줄요약:
콘솔프로그램 만들때 다음 코드를 아무생각 없이(?) main함수 첫째줄에 때려박으면 다 해결된다.

2009/07/08

JYP Hammer Danc


역시 대단하다
흑인과 함께있어도,
눈길을 사로잡게 만든다.

이렇게 춤으로 사람의 시선을 잡는다는건 참 어려운데,
멋있다 :D

괜히 JYP가 아니지.



2009/07/03

화려하지 않은 고백





화려하지 않은 고백
by 이승환

언젠가 그대에게 준 눈부신 꽃다발
그 빛도 향기도 머잖아 슬프게 시들고

꽃보다 예쁜 지금 그대도 힘없이 지겠지만
그때엔 꽃과 다른 우리만의 정이 숨을 쉴 거야

사랑하는 나의 사람아 말없이 약속할 게
그대 눈물이 마를때 까지 내가 지켜준다고

멀고 먼 훗날 지금을 회상 하며
작은 입맞춤을 할 수 있다면

이 넓은 세상위에 그 길고 긴 시간 속에
그 수많은 사람들 중에 오직 그대만을 사랑해

---

화려하지 않음
나에겐 꽤나 중요할 것 같다