Mac + Ruby: нет доступа к ioctl из Socket? Как исправить? - PullRequest
3 голосов
/ 02 ноября 2009

Доброе время суток.

Рубиновый код:

def hw_address(iface)
    sock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM,0)

    buf = [iface,""].pack('a16h16')
    sock.ioctl(SIOCGIFHWADDR, buf);

    sock.close

    return buf[18..24].to_etheraddr
end

puts hw_address('lo0')

Что он делает: получает mac-адрес интерфейса.

Работает на Debian, как и ожидалось. Но в Mac OS X я получаю сообщение об ошибке: `` ioctl ': операция не поддерживается для сокета (Errno :: EOPNOTSUPP) `

Есть ли способ исправить / пропустить это сообщение об ошибке и начать работать ioctl на сокетах?

1 Ответ

0 голосов
/ 29 ноября 2011

http://hintsforums.macworld.com/showthread.php?t=97909

"Следующие функции недоступны в Mac OS X:

1) Библиотека таймеров POSIX (-librt Real Time) 2) ioctl с командой SIOCGIFHWADDR - получить Mac-адрес сетевого интерфейса. "

C'est la vie.

...