C언어 소켓 프로그래밍 중 SO_REUSEADDR 속성적용이 되지 않는듯 합니다.
가장
질문 제목 : c언어 소켓 프로그래밍 중 so_reuseaddr 속성적용이 되지 않는듯 합니다.setsockopt함수로 sol_socket레벨의 sol_reuseaddr 속성을 변경시켰는데, 원하는 결과가 나오지 않습니다.질문 내용 : int sv;
struct sockaddr_in sv_ar;sv = socket(pf_inet,sock_stream,ipproto_tcp);
memset(&sv_ar,0,sizeof(sv_ar));
sv_ar.sin_family = af_inet;
sv_ar.sin_addr.s_addr = htonl(inaddr_any);
sv_ar.sin_port = htons(5000);int option = 1;
setsockopt(sv,sol_socket,so_reuseaddr,(void*)&option,sizeof(option));bind(sv,(struct sockaddr*)&sv_ar,sizeof(sv_ar));while(1)
{
int clnt;
struct sockaddr_in clnt_ar;
socklen_t clnt_ar_sz;clnt = accept(sv,(struct sockaddr*)&clnt_ar,&clnt_ar_sz);
}대충 소스가 이러합니다. 지금 질문 내용 적으면서
바로 적으면서 오타가 잇을수있는데 원소스는 오타없는 소스이구요.
소켓 만들고 소켓 주소정해놓고
bind 함수호출전에 sol_reuseaddr 속성을 바꿨습니다.
속성 변경뒤 반환값으로 성공값인 0이 반환 되었구요.
bind에 성공시 성공메세지
실패시 실패메세지를 띄워놓았습니다.그리고 서버가 처음에 열렸습니다.
그리고 컨트롤+c로 강제로 프로그램 종료뒤 다시 프로그램을 실행시켰는데,so_reuseaddr 속성을 활성화 시켰으니, time-wait상태에 있어도 바로 포트사용이 가능해야되는데,
바인딩 실패라고 뜹니다. 왜 그러는걸까요 ㅠㅠ 분명 속성변경도 성공했는데요.
바로 열리지않고, 이제껏 만들었던 서버와 변함이 없네요...ㅠ
-
한지잠
껏다켜보세요