Pages: [1]   Go Down
Author Topic: ETH - Server.available() - non restituisce Client  (Read 1811 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buongiorno,
è il mio primo post, pero' è già un po' di tempo che mi leggo un il forum ed effettivamente ho già trovato tante informazioni interessanti, e complimenti (e grazie) un po' a tutti per il contributo dato alla comunità.

Scrivo per chiedere una cosa molto concisa:

Ho rilevato che la Server.available() restituisce il client solamente dopo aver ricevuto almeno un carattere dal client. Per esempio utilizzando il telnet bisogna schiacciare invio. E' voluto questo comportamento? o si tratta di un bug?
Attualmente sto scrivendo un'applicazione che appena il client si connette (quindi senza inviare nessun carattere) il server deve rispondere inviando un ack.
Mi sono guardato la libreria ethernet:
Server.cpp:

Client Server::available()
{
  accept();

  for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
    Client 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 Client(MAX_SOCK_NUM);
}


credo che dipenda da quella riga:
 if (client.available())...

infatti:
Client.cpp:

int Client::available() {
  if (_sock != MAX_SOCK_NUM)
    return W5100.getRXReceivedSize(_sock);
  return 0;
}

quindi se il client è collegato, ma non ha inviato nulla, client.available restituisce 0 e non restiuisce il client. Corretto?

Cosa faccio? Mi scrivo una nuova classe ethernet che gestisce meglio questo aspetto? Altre possibilità?

ciao, grazie
paolo
Logged

Pages: [1]   Go Up
Jump to: