- 论坛徽章:
- 0
|
net/socket.c
sys_socket()->sock_create()->__sock_create()->sock_alloc()
- struct socket *sock_alloc(void)
- {
- struct inode * inode;
- struct socket * sock;
- inode = new_inode(sock_mnt->mnt_sb);
- if (!inode)
- return NULL;
- sock = SOCKET_I(inode);//这句我不太明白。
- inode->i_mode = S_IFSOCK|S_IRWXUGO;
- inode->i_sock = 1;
- inode->i_uid = current->fsuid;
- inode->i_gid = current->fsgid;
- get_cpu_var(sockets_in_use)++;
- put_cpu_var(sockets_in_use);
- return sock;
- }
复制代码
sock_alloc()看前面的注释应该是要分配一个socket的结构,SOCKET_I这句话我理解应该是生成一个socket结构。
SOCKET_I(inode)其实就是调用了&container_of(inode, struct socket_alloc, vfs_inode)->socket,
这句话其实就是通过宏先计算出inode在结构socket_alloc中的偏移量,然后得到socket_alloc中socket的地址。
但是我没看出来它在哪分配的socket的空间,或者说socket_alloc的空间?还有结构socket_alloc就inode和socket
两个成员,定义这样一个结构然后再加上container_of这样的转换是不是没这个必要?
才开始看网络内核,对着无名小卒的blog在看。 |
|