[소켓네트워크] - Can not Bind 처리방법
| Can not Bind 처리방법
종종 서버를 키고 끄다 보면 Can not Bind 라고 오류가 발생하면서 킬 수 없는 상태가 발생하게 되는데 발생원인과 해결법을 알아보자
Can not Bind 오류의 발생원인
서버가 CLOSE_WAIT 상태로 아직 다 종료되지 않았기 때문이다 (TCP/IP 흐름 참조)
Can not Bind 오류의 해결방법
기다린다
포트번호을 변경한다
소켓 옵션에서 SO_REUSEADDR 옵션 값을 1로 변경한다
int optval = 1;
=> setsockopt(sock, SOL_SOCKET, SO_REUSRADDR, &optval, sizeof(optval));
또 다른 소켓 옵션 종류
SO_KEEPALIVE : 서버가 살아있는지 신호를 보내 지속적으로 확인하는 옵션
=> int optval = 1;
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval));
SO_LINGER : 커널이 남은 데이터를 다 보냈는지 확인하는 옵션
=> struct linger optvar;
optvar.l_onoff = 1;
optvcar.l_linger = 5;
setsockopt(sock, SOL_SOCKET, SO_LINGER, (char *)&optval, sizeof(optval));
SO_RCVBUF : 받는 버퍼 크기를 설정하는 옵션
=> int optval = 50000;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &optval, sizeof(optval));
'소켓네트워크' 카테고리의 다른 글
[소켓네트워크] - strtok 이용한 문자열 분리 (0) | 2017.05.05 |
---|---|
[소켓네트워크] - 일반 소켓 vs RAW 소켓 (0) | 2017.04.21 |
[소켓네트워크] - TCP/IP 흐름 (0) | 2017.04.01 |
[소켓네트워크] - 소켓과 스트림 한번에 이해하기 (0) | 2017.02.27 |
[소켓네트워크] - strstr 이용한 욕 필터링 (0) | 2017.01.18 |