📄 sockethandler.cpp
字号:
#include "SocketHandler.h"#ifdef WIN32 #include <winsock.h>#else #include <netdb.h> #include <sys/socket.h>#endif#include <unistd.h>#include <stdio.h>#include "Socket.h"#include <iostream>using namespace std;bool SocketHandler::alreadyRunning = false;vector<Socket *> SocketHandler::sockets;void SocketHandler::runLoop() { if (alreadyRunning) { return; } alreadyRunning = true; Socket *sock; int socket, result; while (!sockets.empty()) { fd_set input_sockets; unsigned int sz = sockets.size(); FD_ZERO(&input_sockets); for (unsigned int ix = 0; ix < sz; ++ix) { sock = sockets[ix]; if (sock != NULL) { socket = sock->getSD(); } else { socket = -1; } if (socket != -1) { FD_SET(socket, &input_sockets); } } struct timeval timeout; timeout.tv_sec = 2; timeout.tv_usec = 500 * 1000; #ifdef WIN32 result = select(FD_SETSIZE, (fd_set FAR *)&input_sockets, NULL, NULL, (const struct timeval FAR *)&timeout); #else result = select(FD_SETSIZE, &input_sockets, NULL, NULL, &timeout); #endif switch (result) { case 0: // Timeout on the sockets continue; case -1: perror("select"); alreadyRunning = false; return; // I guess this is right afterall // Otherwise get stuck in an infinite loop... } for (unsigned int ix = 0; ix < sz; ++ix) { sock = sockets[ix]; if (sock != NULL) { socket = sock->getSD(); } else { socket = -1; } if (socket != -1 && FD_ISSET(socket, &input_sockets)) { sock->process(); } } } alreadyRunning = false;}void SocketHandler::addSocket(Socket *socket) { sockets.push_back(socket);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -