В пользовательском режиме не разрешено связываться с сокетом - PullRequest
6 голосов
/ 03 мая 2011

В пользовательском режиме [не-root] на компьютере с Linux я пытаюсь привязать сокет с помощью ioctl(iInterfaceSocket, SIOCSIFADDR, &stCommand). Я получаю error 13 -> Permission denied because of user mode. При переходе из режима пользователя в режим ядра все работает нормально.

Мне нужно привязать сокет только в пользовательском режиме. Пожалуйста, предложите решение, объясняя проблему выше. Если я пропустил какую-либо информацию, пожалуйста, дайте мне знать, и я предоставлю дополнительную информацию.

1 Ответ

8 голосов
/ 03 мая 2011

Вы не можете установить адрес интерфейса, если вы не root (ну, технически, если у вас нет CAP_NET_ADMIN). См. devinet.c .

Решение - запустить от имени пользователя root. Как реализовать это решение, сделать ли всю вашу программу SUID, или попросить пользователя запустить ее через sudo или gksudo , или же разделить вашу программу на две части (root и не root), этот выбор за вами.

...