MySQL 源码解读 -- 网络

网络

以下为老的代码,并非最新代码, 比如并没有使用thread_pool

网络监听

主要代码在sql/mysqld.cc中(handle_connections_sockets),精简后的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
pthread_handler_t handle_connections_sockets(void *arg attribute((unused))) {
FD_SET(unix_sock,&clientFDs); // unix_socket在network_init中被打开
while (!abort_loop) { // abort_loop是全局变量,在某些情况下被置为1表示要退出。
readFDs=clientFDs; // 需要监听的socket
select((int) max_used_connection,&readFDs,0,0,0); // select异步(?科学家解释下是同步还是异步)监听,当接收到??以后返回。
new_sock = accept(sock, my_reinterpret_cast(struct sockaddr *) (&cAddr), &length); // 接受请求
thd= new THD; // 创建mysqld任务线程描述符,它封装了一个客户端连接请求的所有信息
vio_tmp=vio_new(new_sock, VIO_TYPE_SOCKET, VIO_LOCALHOST); // 网络操作抽象层
my_net_init(&thd->net,vio_tmp)); // 初始化任务线程描述符的网络操作
create_new_thread(thd); // 创建任务线程
}
}


网络相关代码 sql/net_serv.cc

my_net_init
my_net_write --> 基本将packet的数据 存到net->buffer 中(调用net_write_buff)
my_net_read



net_write_buff -- 家