Смотрю для начала что там (в Linux) происходит с системными вызовами connect() & accept()...
То, что они системные (а не библиотечные) убеждаемся для начала:
Код: Выделить всё
olej@ubuntu:~/Рабочий стол$ man 2 write
Код: Выделить всё
olej@ubuntu:~/Рабочий стол$ man 3 printf
Код: Выделить всё
olej@ubuntu:~/Рабочий стол$ man 2 connect
Смотрю /usr/include/asm-generic/unistd.h
Код: Выделить всё
...
/* net/socket.c */
#define __NR_socket 198
__SYSCALL(__NR_socket, sys_socket)
#define __NR_socketpair 199
__SYSCALL(__NR_socketpair, sys_socketpair)
#define __NR_bind 200
__SYSCALL(__NR_bind, sys_bind)
#define __NR_listen 201
__SYSCALL(__NR_listen, sys_listen)
#define __NR_accept 202
__SYSCALL(__NR_accept, sys_accept)
#define __NR_connect 203
__SYSCALL(__NR_connect, sys_connect)
...
ОК. Перехожу в kernelspace.
Код: Выделить всё
olej@ubuntu:~/Рабочий стол$ cd /lib/modules/`uname -r`/build/include/asm-generic
olej@ubuntu:/lib/modules/3.2.0-25-generic-pae/build/include/asm-generic$ pwd
/lib/modules/3.2.0-25-generic-pae/build/include/asm-generic
Код: Выделить всё
...
/* net/socket.c */
#define __NR_socket 198
__SYSCALL(__NR_socket, sys_socket)
#define __NR_socketpair 199
__SYSCALL(__NR_socketpair, sys_socketpair)
#define __NR_bind 200
__SYSCALL(__NR_bind, sys_bind)
#define __NR_listen 201
__SYSCALL(__NR_listen, sys_listen)
#define __NR_accept 202
__SYSCALL(__NR_accept, sys_accept)
#define __NR_connect 203
__SYSCALL(__NR_connect, sys_connect)
...
Только если этот файл подключить непосредственно по #include - он орёт что константы переопределены.
А с другой стороны, ругается в коде, что __NR_connect неизвестное имя.
И это вполне может быть, т.к.
- эти константы отличаются от архитектуры к архитектуре (ARM, MIPS ... даже i686 и x86_64 ) ...
- они могут быть определены только как препроцессорные константы периода компиляции и нигде больше ... как общий размер, например, sys_call_table для разных архитектур ... константа __NR_syscalls;