Autor Thema: peer eines sockets ermitteln ohne read... getpeername($socket);  (Gelesen 151 mal)

Offline KölnSolar

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4806
Ich kämpfe mit dem 98_DLNARenderer u. möchte die performance verbessern. Gelauscht wird auf Standardport 1900(SSDP), wo natürlich massenhaft Broadcastmessages ankommen. Ich möchte in der ReadFn frühzeitig die "uninteressanten" messages ausfiltern. Da ein Perl-Modul genutzt wird, "darf" ich aber nicht den buffer lesen(bzw. ich müsste lesen ohne dass der buffer gelöscht wird;finde aber keinen passenden Befehl). Ich habe dann getpeername($socket);ausprobiert, aber da bekomme ich immer nur undefined zurück.

Jemand ne Idee wie ich mehr Infos über den Sender bekomme ohne den buffer durch ein read zu löschen ?

Was könnte bei getpeername($socket) schief laufen ? Code extrakt
 my @sockets = $hash->{helper}{controlpoint}->sockets();
 
  #check if new sockets need to be added to mainloop
  foreach my $s (@sockets) {
    #create chash and add to selectlist
.
.
    $chash->{CD}    = $s;
    $chash->{FD}    = $s->fileno();
    $selectlist{$chash->{NAME}} = $chash;
  }

ReadFn
  my $socket = $hash->{CD};
  my $sockaddr    = getpeername($socket);

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 23398
Antw:peer eines sockets ermitteln ohne read... getpeername($socket);
« Antwort #1 am: 10 Januar 2021, 12:10:17 »
Hypothese: $socket ist eine Instanz von INET::irgendwas aber getpeername will den Filedescriptor ($socket->fileno()).

Offline KölnSolar

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4806
Antw:peer eines sockets ermitteln ohne read... getpeername($socket);
« Antwort #2 am: 10 Januar 2021, 14:35:23 »
Danke Dir.leider nein.
Ich vermute fast, dass das nicht bei einem lauschenden Server ohne konkreten bzw. ständig wechselnden client geht.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt