Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

이상한 코딩 나라의 혜돌이

[C] 소켓 서버를 돌릴 때 발생하는 bind error 본문

Study/Troubleshooting

[C] 소켓 서버를 돌릴 때 발생하는 bind error

혜돌이 2018. 12. 3. 16:15

C언어에서 클라이언트와 통신하기 위한 서버 프로그램을 작성할 때, 소켓을 사용한다.





bind 단계에서는, sin_family, sin_addr, sin_port 등을 설정한다.

프로그램 작성 후 디버깅 및 테스팅을 위해 서버 프로그램을 강제 종료하고, 포트 번호 변경 없이 바로 실행시키면 bind error가 발생한다.

그 이유는 해당 포트를 이미 사용하고 있어서 발생하는 문제이며 기존 프로그램은 종료되었지만 비정상 종료된 상태로 아직 커널이 bind 정보를 유지하고 있기 때문에 발생하는 문제이다.


이때, bind에 사용 되는 소켓의 설정을 약간 변경해 주면 해당 문제를 해결할 수 있다.

setsockopt라는 함수로 소켓 설정을 변경할 수 있다. 

위 함수로 소켓에 SO_REUSEADDR 옵션을 주면 기존에 bind 할 때 이용한 소켓 자원을 프로세스가 재사용할 수 있게 된다.



(예시)


int optvalue = 1;

...

setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, &optvalue, sizeof(optvalue));


Comments