ОС QNX4.25, TCP/IP Runtime 5.1, TCP/IP SDK 5.0
вывод утилиты ls -l /usr/tcp*:
/usr/tcprt:
total 46
drwxrwxr-x 5 root root 4096 Jul 19 2013 .
drwxrwxr-x 16 root root 4096 Apr 23 2013 ..
drwxrwxr-x 5 root root 4096 Jul 08 2011 4.25
drwxrwxr-x 4 root root 4096 Sep 27 2011 5.0
drwxrwxr-x 5 root root 4096 Sep 09 2011 5.10
lrwxrwxrwx 1 root root 15 Jul 19 2013 current -> /usr/tcprt/5.10
-rwxr-xr-- 1 root root 2319 Jun 10 2011 switch.tcpip
/usr/tcptk:
total 33
drwxrwxr-x 4 root root 4096 Sep 27 2011 .
drwxrwxr-x 16 root root 4096 Apr 23 2013 ..
drwxrwxr-x 4 root root 4096 Sep 27 2011 4.25
drwxrwxr-x 4 root root 4096 Feb 18 15:49 5.0
lrwxrwxrwx 1 root root 14 Sep 27 2011 current -> /usr/tcptk/5.0
В одной из задач используем библиотеку Virtual Packet Library - vpack3r.lib
Для работы с виртуальными интерфейсами, необходимо задать их количество менеджеру Tcpip с помощью опции -v.
В штатном режиме - все в порядке, все работает как надо.
Если же менеджер Tcpip запущен без опции -v, то первый вызов функции vp_attach() выдаст ошибку, а повторный вызов vp_attach() приведет к SIGSEGV.
Пример программы:
#include <stdio.h>
#include <stdlib.h>
#include <sys/proxy.h>
#include <net/if_vp.h>
int main (void)
{
pid_t proxy;
int i,sock;
vpid_t vpid;
for(i=0; i<5; i++)
{
printf("try N%d\n",i);
if( (proxy = qnx_proxy_attach(0, 0, 0, -1)) != -1 )
{
if( (sock = socket(AF_INET, SOCK_STREAM, 0)) != -1 )
{
if( (vpid = vp_attach(sock, VP_FILTER, proxy)) != (vpid_t) -1 )
{
printf("vp_attach - ok!\n");
vp_detach(vpid);
break;
}
else
{
perror("vp_attach");
qnx_proxy_detach(proxy);
close(sock);
}
}
else
{
perror("socket");
qnx_proxy_detach(proxy);
}
}
else
{
perror("qnx_proxy_attach");
}
sleep(1);
}
qnx_proxy_detach(proxy);
close(sock);
return EXIT_SUCCESS;
} /* main */
В примере, при второй попытке вызова функции vp_attach программа падает по памяти (SIGSEGV).
Я думаю это не есть хорошо...