2013-05-28 2 views
4

다른 클라이언트의 수신 메시지를 수신하고 수신 할 수 있도록 서버 소켓을 바인드하려고합니다. 하지만 바인딩 할 수 없습니다. 오류를 반환합니다. 소켓 바인드가 실패했습니다. 99. 의미가 무엇인지 읽고 errno 99가 소켓이 없음을 나타냅니다. 어떤 아이디어? 감사합니다소켓 바인드 실패 errno = 99

UDP_socketID = socket(AF_INET, SOCK_DGRAM, 0); 
    if (UDP_socketID < 0) 
    { 
    printf("Socket creation failed! Error = %d\n\n", errno); 
    exit(0); 
    } 

    //specify server address, port and IP 
    bzero((char *)&serverAddr, sizeof(serverAddr)); 
    serverAddr.sin_family = AF_INET; 
    serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    serverAddr.sin_port = htons(SERV_PORT); 
    check = inet_aton(SERVER_IP, &serverAddr.sin_addr); 
    if (check == 0) 
printf("IP conversion error!\n\n"); 

    start = bind(UDP_socketID, (struct sockaddr *) &serverAddr, sizeof(serverAddr)); 
    if (start < 0) { 
    printf("Socket bind failed = %d\n", errno); 
    exit(0); 
} 
    else 
    printf("Socket bind successful!\n"); 

답변

6

99는 EADDRNOTAVAIL입니다. 어떤 의미인지 (사람이 bind (2)에서) :

존재하지 않는 인터페이스가 요청되었거나 요청 된 주소가 로컬 이 아닙니다.

아마도 SERVER_IP은 호스트의 IP가 아닙니다.

+0

'perror' 또는'strerror (errno)'를 사용하여'errno'에 연결된 휴먼 메시지를 얻습니다. –

+0

오, 안돼! "요청 된 주소를 할당 할 수 없습니다." 서버 IP는 나 아닌 다른 호스트에 있습니다. 이 문제를 어떻게 해결할 수 있습니까? – Broccoli

+0

@ 브로콜리 : 이것이 서버 측 코드라고 가정합니다. 서버가 수신 대기하는 인터페이스가 마음에 들지 않으면 SERVER_IP 항목을 제거하고 단순히 서버 소켓을 INADDR_ANY와 바인딩 할 수 있습니다. – SKi