setsockopt 에서 SO_LINGER 쓰는 방법
글쓴이: 익명 사용자 / 작성시간: 월, 2001/10/15 - 11:13오전
안녕하세요. 홍순이 입니다.
1. socket을 stream 형태로 생성하고
2. option을 주고
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &sockop, sizeof(sockop));
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &sockop, sizeof(sockop));
3. connect를 내부에 아무도 쓰지 않는 ip로 했습니다.
그런데 이것이 거의 몇십분동안 그냥 멍하니 있다가 한참만에야 error number
110 connection timeout이 나옵니다.
그래서 connect시 시간을 제한해서 바로 다음 작업으로 넘어 가고 싶은데요.
SO_LINGER가 그런 역할을 해주는 것 같은데 자세한 사항 알고 계신분에게 부탁
좀 드립니다.
감사합니다.
Forums:
Re: setsockopt 에서 SO_LINGER 쓰는 방법
그럴 경우 제가 본 것들은 대부분 alarm을 이용해서..
시그널로 처리하던걸요..
쿨럭..
Re^2: setsockopt 에서 SO_LINGER 쓰는 방법
자세한 설명이나. 아님 소스 출처를 혹시 갈켜주시면..
감사합니다.
Re^3: setsockopt 에서 SO_LINGER 쓰는 방법
음 우선 qmail 소스 (cr.yp.to) 에도 있구요..
alarm () 함수로 시간을 지정해 놓으면 그 지정된 시간 후에
SIG_ALRM 시그널이 발생하구요..
이 시그널의 핸들러를 접속이 안될경우의 처리 함수로 지정하시구요..
시간안에 접속이 되었을 경우는 핸들러를 되돌려 놓으면 됩니다..
p.s proftpd 의 inet.c 에서 SO_LINGER 을 쓰는군요..
하지만 역시 timer 는 쓰네요. 방금 본거라서 자세한 것은 소스를 ㅡ.ㅡ
Re: setsockopt 에서 SO_LINGER 쓰는 방법
SO_LINGER 옵션은 socket이 종료 되었을때 버퍼에 저장된 데이타의 처리 방식
을 지정하는 옵션입니다. 그래서 타이머하고는 상관이 없는걸로 알고 있습니
다. 그래서 타이머를 설정하실려면 아랫분이 답변하신것과 같이 alarm을 사용
해야 할것 같습니다.
댓글 달기