#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<fcntl.h> #include<thread> #include<mutex> #include<queue> using namespace std; #define MaxSize 2048 std::queue<int> SocketQueue; /* tcp多线程并发,非阻塞IO模式, 单线程对socket遍历。 因为设置socket为非阻塞模式,所以能快速读取是否有数据。 */ void *Task(void *arg) { while (1) { while (SocketQueue.empty()) { sleep(1); } int socket = SocketQueue.front(); SocketQueue.pop(); fd_set rfds, wfds; FD_ZERO(&rfds); FD_ZERO(&wfds); FD_SET(socket, &rfds); FD_SET(socket, &wfds); int selres = select(socket + 1, &rfds, &wfds, NULL, NULL); //socket 可读 char msg[MaxSize] = { '