Moin Paresy,
ich muss meine Peaq-Multiroom-Lautsprecher per DLNA-Discovery im Netzwerk suchen. Dafür habe ich unter 3.4 folgendes Skript benutzt, das eine Liste mit allen UPnP-Devices zurückgibt:
<?
#$st = "urn:schemas-pure-com:service:RTSPGateway:1";
$st = "ssdp:all";
$mx = 2;
$man = 'ssdp:discover';
$from = null;
$port = null;
$sockTimout = '10';
$USER_AGENT = 'MacOSX/10.8.2 UPnP/1.1 PHP-UPnP/0.0.1a';
// BUILD MESSAGE
$msg = 'M-SEARCH * HTTP/1.1' . "
";
$msg .= 'HOST: 239.255.255.250:1900' ."
";
$msg .= 'MAN: "'. $man .'"' . "
";
$msg .= 'MX: '. $mx ."
";
$msg .= 'ST:' . $st ."
";
$msg .= 'USER-AGENT: '. $USER_AGENT ."
";
$msg .= '' ."
";
// MULTICAST MESSAGE
$sock = socket_create( AF_INET, SOCK_DGRAM, 0 );
$opt_ret = socket_set_option( $sock, 1, 6, TRUE );
$send_ret = socket_sendto( $sock, $msg, strlen( $msg ), 0, '239.255.255.250', 1900);
// SET TIMEOUT FOR RECIEVE
socket_set_option( $sock, SOL_SOCKET, SO_RCVTIMEO, array( 'sec'=>$sockTimout, 'usec'=>'0' ) );
// RECIEVE RESPONSE
$response = array();
do {
$buf = null;
@socket_recvfrom( $sock, $buf, 1024, MSG_WAITALL, $from, $port );
if( !is_null($buf) )$response[] = $buf;
} while( !is_null($buf) );
// CLOSE SOCKET
socket_close( $sock );
print_r( $response);
?>
Unter 4.0 Beta ist das Skript umgehend fertig ohne Ergebnisse (oder Fehlermeldungen) zu bringen. Unter 3.4 lief es bestimmt 10 Sekunden lang.
Da das für mich ein echter „Dealbreaker“ für den Umstieg auf 4.0 ist würde ich mich über Hilfestellungen freuen!