#include /* See NOTES */
#include
int socket(int domain, int type, int protocol);
内核创建基本过程:

socket fd是对用户提供接口,与文件描述符关联
而sock实例负责与内核协议栈进行对接。
file->f_op = &socket_file_ops file->private_data = sock sock->file = file; #include /* See NOTES */
#include
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
执行的基本流程:
sock->ops->bind()方法,从sock->sk取得sk,调用sk->sk_port->get_port()检查端口是否冲突,是否可以绑定。如果可以绑定,则初始化本地地址和端口。 #include /* See NOTES */
#include
int listen(int sockfd, int backlog);

内核调用的基本过程:
sock->ops->listen(),从socket中拿到sock实例sk;sk->sk_max_ack_backlog = backlog; #include /* See NOTES */
#include
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
内核调用的基本过程:
#include /* See NOTES */
#include
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include
int accept4(int sockfd, struct sockaddr *addr,
socklen_t *addrlen, int flags);
内核处理的基本流程:
new_sock->sk=sk2;new_sock->ops=sock->opsnew_file->private_data=new_sock,new_sock->file = new_file 进行关联;