网络
以下为老的代码,并非最新代码, 比如并没有使用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 -- 家