상세 컨텐츠

본문 제목

[네트워크프로그래밍] 소켓 bind error 해결방법

자료실/컴퓨터 공부

by 깔깔앵무 2020. 4. 25. 15:06

본문

반응형

이번 포스팅은 간단한 bind 에러 해결법이다.

 

 

네트워크프로그래밍을 하다보면 bind error가 나게 되는데,

 

그 이유는 이미 쓰인 포트에 소켓이 다시 접속할 수 없기 때문이다.

 

 

따라서 해결방법은 두 가지다.

 

 

1. 할당된 포트을 강제 해제하는 방법

 

리눅스의 경우 터미널 창에서, 윈도우의 경우 cmd 창에서

 

$netstat -lntp(리눅스) , netstat -n(윈도우)

라고 입력해서 할당된 소켓 값, PID를 알아낸다.

 

$sudo kill [PID]

그리고 그 PID를 kill 해주면 소켓을 강제 해제할 수 있으며

 

그 이후 몇 초 기다렸다가(할당 해제하는 시간 고려) 실행하면 잘 될 것이다.

 

 

 

2. 중복된 소트에 bind하는 것을 허용하는 방법

 

이는 코드에서 허용을 해주면 된다.

 

 

#include <sys/types.h> #include <sys/socket.h>
int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);

 

위 두개의 함수를 적절히 사용하면되는데, 여기서 필요한 건 setsockopt 만이다.


int option;  server_socket = socket( PF_INET, SOCK_STREAM, 0);
option = 1; // SO_REUSEADDR 의 옵션 값을 TRUE 로
setsockopt( server_socket, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option) );

위와 같이 설정해주면 중복 소켓 사용을 허용하게 된다.

반응형

관련글 더보기