Am Wochenende habe ich (eher privat) ein wenig in PHP gebastelt.
Irgendwann kam ich zu dem Punkt, wo ich gerne über ein UDP-Socket Multicast-Nachrichten empfangen und verarbeiten wollte. Leider musste ich feststellen, dass die dazu notwendige IP_ADD_MEMBERSHIP-Option nicht für Sockets oder Streams zur Verfügung steht. Vor 6 Jahren gab es wohl einen Ansatz um diese Funktionalität im PHP selbst zu implementieren, aber daraus ist bisher nichts geworden und der Author resignierte enttäuscht. So wie es aussieht, werde ich bis PHP 5.4 warten müssen.
Jetzt hatte ich aber keine Lust, diesen Patch für den Moment zu übernehmen und in die PHP's die ich nutze einzukompilieren. Deswegen habe ich gestern im Zug von Düsseldorf nach Stuttgart meine erste PHP-Erweiterung geschrieben und entsprechende Funktionalität (IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP, IP_MULTICAST_IF, IP_MULTICAST_LOOP und IP_MULTICAST_TTL) bereitgestellt, die Sockets in Richtung Multicast modifiziert.
Die schwierigste Aufgabe dabei war zu erkennen, ob es sich um "Sockets" (PHP-Erweiterung "Sockets") oder "Streams" (z.B. via "stream_socket_client") handelt und dementsprechend die passenden Descriptoren zu finden. In letzterem Falle habe ich immernoch die Vermutung, dass meine Erweiterung hier zu einem Segfault führen könnte - das ist der Entwickler dann aber selbst schuld
Veröffentlicht habe ich die Erweiterung noch nicht - PHP mag grundsätzlich wohl nicht so wirklich die GPL, sodass ich mir über eine alternative Lizenz Gedanken machen werde, vermutlich was BSD-ähnliches. Wer Interesse an der Erweiterung hat, kann mir da ja auf die Füße treten
Kommentare