>Функция socket() подразумевает работу либо по
>TCP, либо по UDP -
>иначе говоря, использует протокол сетевого
>уровня IP. А мне он
>мешает, этот айпи.
Ничего подобного. Функция socket просто создает сокет и привязывает его к заданному уровню. Вот и все :))
Куски "man 2 socket":
int socket(int domain, int type, int protocol);
Socket создает конечную точку соединения и возвращает ее описатель.
...
PF_PACKET - Низкоуровневый пакетный интерфейс
...
SOCK_RAW - Обеспечивает доступ к низкоуровневому сетевому протоколу.
...
SOCK_PACKET - это устаревший тип сокета, позволявший получать необработанные пакеты прямо от драйвера устройства. Используйте вместо него packet(7).
...
-------
Куски из "man 7 packet":
packet, PF_PACKET - пакетный интерфейс уровня устройств.
...
packet_socket = socket(PF_PACKET, int socket_type, int protocol);
...
socket_type равен либо SOCK_RAW для raw-пакетов (включая заголовок установки соединения), либо SOCK_DGRAM для подготовленных пакетов без заголовка уровня соединения. Информация заголовка уровня соединения в общем формате предоставлена в sockaddr_ll. protocol - номер протокола в соответствии с IEEE 802.3 в сетевом порядке байтов. Список возможных протоколов приведен в файле <linux/if_ether.h> Если protocol содержит значение htons(ETH_P_ALL), то программой будут приниматься все протоколы. Все входящие пакеты этого типа протокола будут передаваться пакетному сокету до того, как они будут переданы протоколам, реализованным в ядре.
...
Пакеты SOCK_RAW передаются драйверу устройства и принимаются от него без всяких изменений данных пакета. При получении пакета адрес обрабатывается и передается в стандартной структуре адреса sockaddr_ll. При передаче пакета буфер пользователя должен содержать заголовок физического уровня. Пакет передается без изменений драйверу сетевого интерфейса, указанному в адресе назначения. Hекоторые драйверы устройств всегда добавляют к заголовку и другие заголовки. SOCK_RAW похож, но не совместим с устаревшим SOCK_PACKET для Linux 2.0.
-------
Я не думаю, что в солярке этот API будет сильно отличаться от QNX, Linux или BSD систем.
Еще вопросы есть ? Или просто нету доки ?