netstat 에서 bind 까지만 한 스트림 소켓이 보이지 않는데.. 정

raymundo의 이미지

안녕하세요,

    ...
    sck_inet = socket(AF_INET,SOCK_STREAM  ,0);

    memset(&adr_inet,0,sizeof adr_inet);
    adr_inet.sin_family = AF_INET;
    adr_inet.sin_port = htons(39000);
    adr_inet.sin_addr.s_addr = INADDR_ANY;
    len_inet = sizeof adr_inet;

    bind(sck_inet, (struct sockaddr *)&adr_inet, len_inet);

    system("netstat -pa --tcp);
    ...

위와 같이 스트림 소켓을 생성하고, 바인드 한 후에 netstat 으로 출력을 시켰습니다. 그런데 해당 39000 번 포트의 정보가 전혀 출력되지 않네요. netstat 에 -a 옵션이 있으면 listen 하고 있지 않더라도 출력된다고 매뉴얼페이지에 나와 있는데요.

listen 까지 한 후에 netstat 을 하면 그때는 나옵니다. 또는 스트림이 아니라 데이타그램 소켓을 생성하고 바인드 한 후 netstat -pa --udp 로 출력을 시켜도 다음과 같이 나옵니다.

udp        0      0 *:39000                 *:*                                 26659/a021

스트림일 때는 안 나오는 게 정상인가요? 위 소스를 적을 때는 생략했지만 바인드 등의 리턴값으로 에러체크도 다 해 주었습니다. 에러는 없었고요.

조언을 부탁드립니다.

pynoos의 이미지

linux는 안나오는 것 같습니다.

원래 bind만 되면, socket state diagram의 closed 상태가 시작하는 것입니다.

solaris 같은 경우는 BOUND
aix, hpux 는 CLOSED 상태로 나옵니다.

raymundo의 이미지

으윽... 그렇군요. 확인해 주셔서 감사합니다.

좋은 하루 되세요!

raymundo의 이미지

으윽... 일단 다른 플랫폼에서는 출력이 된다는 말을 듣고 그럼 리눅스의 netstat 의 버그인가 아니면 다른 이유가 있는가를 찾아봤는데 못 찾겠네요. (관련 단어들만으로 검색을 하면 결과는 수도 없이 많이 나오긴 하는데)

정확한 이유를 아시는 분 안 계신가요? ㅠ,.ㅠ

P.S. 오늘에야 알았는데 xml 출력 링크가 있었군요! 새로 올라온 글 체크하기가 훨씬 편해졌네요. (원래 있었나..?? -_-a;;;)

좋은 하루 되세요!