2016-11-29 4 views
0

Если вы запустите этот пример, вы увидите, что порт никогда не указан netstat. Зачем? И как мне это сделать?Почему открытый порт моего сокета не указан netstat?

#include <WinSock.h> 
#include <io.h> 
#include <stdio.h> 

#pragma comment(lib, "WS2_32") 

int main() { 
    WORD wVers = MAKEWORD(2, 2); 
    WSADATA wsa; 
    WSAStartup(wVers, &wsa); 
    SOCKET sock = socket(AF_INET, SOCK_STREAM, 6); 
    if (sock != INVALID_SOCKET) { 
     struct sockaddr_in addr = { 0 }; 
     addr.sin_family = AF_INET; 
     addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 
     int addrlen = sizeof(addr); 
     bind(sock, (struct sockaddr *)&addr, addrlen); 
     if (getsockname(sock, (struct sockaddr *)&addr, &addrlen) == 0) { 
      fprintf(stdout, "HANDLE = %d, port = %d\n", sock, addr.sin_port); 
      fflush(stdout); 
      system("netstat -a -n"); 
     } 
     closesocket(sock); 
    } 
    WSACleanup(); 
} 
+2

Вы подтвердили, что bind() преуспевает? Что делать, если вы также вызываете функцию listen() после bind()? – nos

+0

@nos: Да, это успешно, иначе у getsockname не было бы порта для возврата. Но я не уверен, зачем слушать. Порт уже назначен мне, не так ли? – Mehrdad

+0

'bind' действительно [резервирует] (http://pastebin.com/LQavGgUf) порт тогда и там, по крайней мере, на Linux. – ikegami

ответ

5

netstat -a только содержит список подключенных разъемов и гнезда для прослушивания.

-a   Displays all connections and listening ports. 

Ни connect ни listen называли на сокет, так что выходит за пределы компетенции netstat -a.

Однако, начиная с Windows 10, вы можете использовать netstat -q.

-q   Displays all connections, listening ports, and bound 
+0

Ну, теперь я чувствую себя глупо :) +1 спасибо – Mehrdad

+1

На самом деле - по крайней мере, на окнах 10 netstat имеет этот флаг '' -q Отображает все подключения, прослушивающие порты и связанные ". Это показывает эти неполные сокеты со словом« BOUND »в колонка государства – nos

+0

@nos, спасибо. Добавлен к моему ответу. – ikegami

Смежные вопросы