Pisząc serwer w PHP natknąłem się na mały problem - jak sprawdzić czy dany zasób (nadal) jest streamem?
Mianowicie chodzi o to, że używam systemowy "budzik" czyli stream_select() wraz z timeoutem na 120 sekund, jednakże po "wybudzeniu" dostaję dwie tablice - read i write - gdy jednak obrobię write może się okazać, że sockety będące we write są już nieaktualne (zostały rozłączone w procesie sprawdzania w read).
Może brzmi to chaotycznie ale kod powinien rozjaśnić sprawę:
Kod
$read = $write = $clientsSockets;
$modFd = stream_select($read, $write, $_e=NULL, 120);
foreach($read as $readCl) {
if([jakis warunek]) fclose($readCl);
}
foreach($write as $writeCl) echo stream_socket_get_name($writeCl, true); //Błąd jesli warunek [jakis warunek] zostal spelniony]
$modFd = stream_select($read, $write, $_e=NULL, 120);
foreach($read as $readCl) {
if([jakis warunek]) fclose($readCl);
}
foreach($write as $writeCl) echo stream_socket_get_name($writeCl, true); //Błąd jesli warunek [jakis warunek] zostal spelniony]
Chciałbym zaniechać akcji (w tym wypadku pobrania nazwy) gdy socket już nie jest socketem.