0
일부 소켓 응용 프로그램을 작성하려고하는데 문제가 있습니다. OS가 내 주소에 대해 임의의 무료 포트 번호를 선택하도록합니다. 그러나 포트 번호 = 0을 수신합니다. 내가 잘못 했나요?bind() 제로 포트를 선택하십시오
struct sockaddr_in addr;
socklen_t addrLen;
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd == -1) {
ThreadError("Failed to create data channel socket");
}
addr.sin_family = AF_INET;
addr.sin_port = 0; // pick random free port
addr.sin_addr.s_addr = srvAddr; // = inet_addr(127.0.0.1)
if (bind(fd, (const struct sockaddr *)&addr, sizeof(addr)) == -1) {
ThreadError("Failed to bind data channel");
}
if (getsockname(fd, (struct sockaddr *)&addr, &addrLen) == -1) {
ThreadError("getsockname() failed");
}
if (listen(fd, 1) == -1) {
ThreadError("Failed to set socket to listen mode");
}
// addr.sin_port == 0
@AhmedMasud 제공 한 인용문은 전혀 바인딩되지 않은 소켓에 관한 것입니다. 당신이 혐의했던 것과는 반대로 그렇게해야한다는 것과 그곳에는 당신이 주장한 바없는 제로 항구에 묶을 수 없다는 것 외에는 아무것도 없다는 것은 없습니다. 또한 0 * 주소 (* INADDR_ANY)에 bind() 할 수 있습니다. – EJP