套接字的绑定、监听、连接和断开

1、套接字的绑定

创建完套接字服务器端会在应用层使用bind函数惊醒套接字的绑定,这时会产生系统调用,sys_bind内核函数进行套接字。

系统调用函数的具体实现

SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)   {       struct socket *sock;       struct sockaddr_storage address;       int err, fput_needed;          sock = sockfd_lookup_light(fd, &err, &fput_needed);       if (sock) {           err = move_addr_to_kernel(umyaddr, addrlen, (struct sockaddr *)&address);           if (err >= 0) {               err = security_socket_bind(sock,                              (struct sockaddr *)&address,                              addrlen);               if (!err)                   err = sock->ops->bind(sock,                                 (struct sockaddr *)                                 &address, addrlen);           }           fput_light(sock->file, fput_needed);       }       return err;   }  

首先调用函数sockfd_lookup_light()函数通过文件描述符来查找对应的套接字sock。

static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed)   {       struct file *file;       struct socket *sock;          *err = -EBADF;       file = fget_light(fd, fput_needed);       if (file) {           sock = sock_from_file(file, err);           if (sock)               return sock;           fput_light(file, *fput_needed);       }       return NULL;   }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/740fb7ef0265377c907f15bce4328232.html