LINUX.ORG.RU

Проблемка с bind


0

0

Вот кусочек кода серверной части. Почему-то bind под простым пользователем выдает Permission denied.
В чем могут быть проблемы и как их можно обойти?

if(setsockopt(serv_data.socket,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) {
        sprintf(buf,"Can't setsockopt: %s",strerror(errno));
        write_log(buf);
        exit(-1);
    }
    
    
    bzero(&addr,sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(COMMAND_PORT);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    if(bind(serv_data.socket, (struct sockaddr *)&addr, sizeof(addr)) != 0){
        sprintf(buf,"Can't bind socket: %s\n",strerror(errno));
        write_log(buf);
        stop_all();
    }
    if(listen(serv_data.socket, MAX_CLIENTS) != 0){
        sprintf(buf,"Can't listen port: %s\n",strerror(errno));
        write_log(buf);
    return;
    }

★★★★

Исправь:

addr.sin_addr.s_addr = INADDR_ANY;

anonymous
()

Ну во-первых в файлике netinet/in.h прописано
#define INADDR_ANY ((in_addr_t) 0x00000000)
Так что как ты там байты не крути, все равно ноль в итоге.

Но я таки попробовал и не помогло.



Dead ★★★★
() автор топика

А порт какой? если < 1024, то так и должно быть.

vnp
()

Спасибо. Действительно поставил больше 1024 и заработало. Не знал что есть такие ограничения на номер порта.

Dead ★★★★
() автор топика

Попутно вопрос, а как тогда работают различного рода сервера типа apache? Они ведь нормально работают от юзера и порт у них < 1024.

Dead ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.