OS/vxWorks Client 연결해제 시 time_wait 상태 시간 감소
  • 728x90
    반응형

     

     

    Socket Client 연결해제시 time_wait

    상태 시간 감소 시키기


     

     

    1. 현상

    TCP/IP 소켓을 생성한 후 connect 함수 호출로 서버에 연결한 상태에서 Close

    함수를 호출할 경우 netstat 의 State에 time_wait 상태에 걸리게된다.

     

    active close
    접속 종료를 먼저하는 행위를 뜻하며 TCP 프로토콜에서 active close는 FIN 세그먼트를 먼저 전송하는 측을 의미한다. 소켓 프로그래밍에서는 close 혹은 shutdown 함수를 먼저 호출하는 측이 active close를 하는 측이다.

    client 소켓을 bind 하여 지정된 포트를 사용하는 경우 다시 연결하는데에 걸리는

    시간차가 발생하게 된다.

    예기치않는 연결해제 발생시 빠르게 connect 하기위해 setsockopt 함수의 SO_LINGER 옵션을 사용하여 time_wait 시간을 원하는 시간으로 설정하여 문제를 해결하였다.

     

     

    [ Microsft의 linger 사용법 설명 ]

     

    LINGER (winsock.h) - Win32 apps

    Maintains information about a specific socket that specifies how that socket should behave when data is queued to be sent and the closesocket function is called on the socket.

    docs.microsoft.com

     

     

     

     

     

    struct linger {
    	int	l_onoff;		/* option on/off */
    	int	l_linger;		/* linger time */
    };
    struct linger solinger = {1, 1};
    setsockopt(*sFd, SOL_SOCKET, SO_LINGER, (char *)&solinger, sizeof(struct linger));

     

     

    solinger 변수의 첫번째 구조체 멤버는 옵션의 ON/OFF 역할을 하며 NONBLOCKING 소켓에서 사용하는것은 권장하지 않는다. l_onoff 가 1일 경우 l_linger 에 들어가는 숫자는 time_wait 의

    초단위 시간으로 설정 된다. 

     

     

     

    728x90
    반응형

    'OS > vxWorks' 카테고리의 다른 글

    VxWorks to windows ping 에코 설정  (0) 2017.07.10
    Vxworks (Symbol Matching)  (0) 2017.07.10
    RTOS 개념 및 소개  (0) 2017.07.10
    vxWorks Tip  (0) 2017.07.10
    vxWorks ip 설정  (0) 2017.07.10
상단으로