EthernetClient EthernetServer::available() { if (new_clients.empty()) { return EthernetClient(); } else { int sock = new_clients.front(); new_clients.pop_front(); return EthernetClient(sock); } }
AtMegaWebServer::AtMegaWebServer(PathHandler handlers[], const char** headers) : handlers_(handlers), server_(EthernetServer(80)), path_(NULL), request_type_(UNKNOWN_REQUEST), client_(EthernetClient(255)) { if (headers) initHeaders(headers); }
// This function blocks until we get a client connected. // It will timeout after 50ms and return a blank client. // If it succeeds it will return an EthernetClient. EthernetClient EthernetServer::available() { fd_set sock_set; FD_ZERO(&sock_set); FD_SET(m_sock, &sock_set); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 50 * 1000; // 50ms select(m_sock + 1, &sock_set, NULL, NULL, &timeout); if (FD_ISSET(m_sock, &sock_set)) { int client_sock = 0; struct sockaddr_in cli_addr; unsigned int clilen = sizeof(cli_addr); if ((client_sock = accept(m_sock, (struct sockaddr *) &cli_addr, &clilen)) <= 0) return EthernetClient(0); return EthernetClient(client_sock); } return EthernetClient(0); }
EthernetClient EthernetServer::available() { accept(); for (uint8_t i=0; i < MAX_SOCK_NUM; i++) { if (server_port[i] == _port) { uint8_t stat = socketStatus(i); if (stat == SnSR::ESTABLISHED || stat == SnSR::CLOSE_WAIT) { if (socketRecvAvailable(i) > 0) { EthernetClient client(i); return client; } } } } return EthernetClient(); }
EthernetClient EthernetServer::available() { accept(); for (int sock = 0; sock < MAX_SOCK_NUM; sock++) { EthernetClient client(sock); if (EthernetClass::_server_port[sock] == _port && (client.status() == SnSR::ESTABLISHED || client.status() == SnSR::CLOSE_WAIT)) { if (client.available()) { // XXX: don't always pick the lowest numbered socket. return client; } } } return EthernetClient(MAX_SOCK_NUM); }
TinyWebServer::TinyWebServer(PathHandler handlers[], const char** headers) : handlers_(handlers), server_(EthernetServer(8000)), path_(NULL), request_type_(UNKNOWN_REQUEST), client_(EthernetClient(255)) { if (headers) { int size = 0; for (int i = 0; headers[i]; i++) { size++; } headers_ = (HeaderValue*)malloc_check(sizeof(HeaderValue) * (size + 1)); if (headers_) { for (int i = 0; i < size; i++) { headers_[i].header = headers[i]; headers_[i].value = NULL; } headers_[size].header = NULL; } } }
#endif static bool clientsConnected[MY_GATEWAY_MAX_CLIENTS]; #endif #if defined(MY_USE_UDP) EthernetUDP _ethernetServer; #else EthernetServer _ethernetServer(_ethernetGatewayPort); #endif #if defined(MY_GATEWAY_ESP8266) static EthernetClient clients[MY_GATEWAY_MAX_CLIENTS]; static inputBuffer inputString[MY_GATEWAY_MAX_CLIENTS]; #else static EthernetClient client = EthernetClient(); static inputBuffer inputString; #endif #ifndef MY_IP_ADDRESS void gatewayTransportRenewIP(); #endif // On W5100 boards with SPI_EN exposed we can use the real SPI bus together with radio // (if we enable it during usage) #ifdef MY_W5100_SPI_EN void _w5100_spi_en(bool enable) { if (enable) {