이번 포스팅은 간단한 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) );
위와 같이 설정해주면 중복 소켓 사용을 허용하게 된다.
[객체지향개발론] 객체지향(Object Oriented) 개요 (0) | 2020.06.22 |
---|---|
[운영체제] Silberschatz 1장 연습문제 풀이 (2) | 2020.06.13 |
[네트워크프로그래밍] 버추얼 박스 가상머신 세션을 열 수 없습니다. (0) | 2020.04.25 |
[네트워크프로그래밍] 네트워크의 등장과 발전 (0) | 2020.04.23 |
[Git] 깃허브(Github) 저장소 생성하기 (0) | 2020.04.23 |