(Gelöst) HTTP-Port zur Laufzeit ändern?

Hallo, ich habe am Anfang des Sketches u.a. definiert:

EthernetServer MyServer(80);

Im Setup möchte ich aber den Port gerne ändern (nachdem ich die Konfig-Werte von der SD-Karte gelesen habe):

int port = 84;

EthernetServer MyServer(port);
  Ethernet.begin(mac, ip, gateway, gateway, subnet);
  MyServer.begin();

Wird zwar fehlerfrei compiliert, aber leider auch ignoriert, der Server startet trotzdem auf Port 80.

Gibt es hier einen Trick? Viele Grüße, paulinchen

Muss der MyServer.begin nicht ebenfalls Parameter haben ?

Nö. Ethernet funktioniert ja auch, nur die 2. Port-Zuweisung wird ignoriert?

paulinchen

Musst Du den "anderen" Server erst stoppen oder wird das automatisch gemacht ?

Es gibt leider kein Server.stop() oder Server.close().

Hat noch jemand eine Idee?

Ich habe mir jetzt in die Libary "EthernetServer.h" bzw. "EthernetServer.cpp" eine eigene Funktion dafür eingebaut.

Viele Grüße, paulinchen

Zeigen....Zeigen... ;)

EthernetServer.h:

class EthernetServer :
public Server {
private:
  uint16_t _port;
  void accept();
public:
  EthernetServer(uint16_t);
  EthernetClient available();
  virtual void begin();
 virtual void ths_port_change(uint16_t);     //diese Zeile einfügen...
  virtual size_t write(uint8_t);
  virtual size_t write(const uint8_t *buf, size_t size);
  using Print::write;
};

EthernetServer.cpp:

//diese Zeilen einfügen...
void EthernetServer::ths_port_change(uint16_t neu_port)
{
  //alle aktiven Clients auf dem alten Port stoppen...
  for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
    EthernetClient client(sock);
    if (EthernetClass::_server_port[sock] == _port) {
      client.stop();
    }
  }
  //neuen Port zuweisen...
  _port = neu_port;
}

Prima, Danke - also lag es doch letztendlich daran, dass der alte Port "weiter lief" und der Neue nicht Gas geben konnte :-) Gut zu wissen, aber meine WebServer laufen auf fixem Port.