目标: 看明白在uclibc中网络系统调用是如何实现的,和普通的Linux有什么区别
0. 将uClibc-0.9.30.1/libc/inet目录下的文件按文件大小排列一下,会发出100多字节的文件有很多,都是调用的。呵呵。
1. 代码文件:uClibc-0.9.30.1/libc/inet/socketcall.c 代码如下:
#ifdef L_recv
extern __typeof(recv) __libc_recv;
#ifdef __NR_recv
#define __NR___libc_recv __NR_recv
_syscall4(ssize_t, __libc_recv, int, sockfd, __ptr_t, buffer, size_t, len,
int, flags)
#elif defined(__NR_socketcall)
/* recv, recvfrom added by bir7@leland.stanford.edu */
ssize_t __libc_recv(int sockfd, __ptr_t buffer, size_t len, int flags)
{
unsigned long args[4];
args[0] = sockfd;
args[1] = (unsigned long) buffer;
args[2] = len;
args[3] = flags;
return (__socketcall(SYS_RECV, args));
}
#elif defined(__NR_recvfrom)
libc_hidden_proto(recvfrom)
ssize_t __libc_recv(int sockfd, __ptr_t buffer, size_t len, int flags)
{
return (recvfrom(sockfd, buffer, len, flags, NULL, NULL));
}
#endif
libc_hidden_proto(recv)
weak_alias(__libc_recv,recv)
libc_hidden_weak(recv)
#endif
#ifdef L_connect
extern __typeof(connect) __libc_connect;
#ifdef __NR_connect
#define __NR___libc_connect __NR_connect
_syscall3(int, __libc_connect, int, sockfd, const struct sockaddr *, saddr, socklen_t, addrlen)
#elif defined(__NR_socketcall)
int __libc_conn