이 예제를 실행하면 포트가 결코 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();
}
bind()가 성공했는지 확인 했습니까? bind() 후에도 listen()을 호출하면 어떨까요? – nos
@nos : 성공합니다. 그렇지 않으면 getsockname에 반환 할 포트가 없습니다. 하지만 왜 듣기가 필요한지 잘 모르겠습니다. 그 항구는 이미 나 한테 할당되어 있잖아. 그렇지? – Mehrdad
'bind'는 적어도 Linux에서는 포트를 그 자리에두고 [reserve] (http://pastebin.com/LQavGgUf)합니다. – ikegami