0
私はPHPソケットサーバーを作っていますが、私のサーバーにソケットを読み取らせることができません。PHPサーバが作成したばかりのソケットをどのように読み取るのですか?
$this->log("Creating socket (please wait)...");
$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if(socket_bind($this->socket, "127.0.0.1", 8080) === false){
$this->log("Failed to bind socket to port (8080)");
exit();
}
socket_listen($this->socket, 5);
if(!is_resource($this->socket)){
$this->log("Socket isn't a resource. Something went wrong, exiting.");
exit();
}
$this->log("Socket created, creating socket reader...");
$this->socketReader = new SocketReader($this);
$this->log("server started");
//socket should be non-blocking
socket_set_nonblock($this->getSocket());
//called every 10000 microseconds to read socket (error line here)
public function process(){
$buffer = socket_read($this->getSocket(), 128);
var_dump($buffer);,
}
私が手にエラーがある:
`Warning: socket_read(): unable to read from socket [57]: Socket is not connected` when calling proccess().
これはなぜでしょうか?ソケットは正常に作成されますが、潜在的な受信データを読み取ろうとするとエラーが発生します。
着信接続に接続された新しいソケットを返すには、socket_accept()を呼び出す必要があります。 – Barmar
@Barmar私がそれを呼び出すと、サーバーはフリーズします。私がそのset_non_blockを呼び出すと、falseを返します。私はサーバが接続を待つのを望んでおらず、ちょうどそれらをダニでパッシブに検出します。 – captincrunch
非ブロックにして、定期的に 'socket_accept'を呼び出します。 falseを返した場合、処理するための接続はありません。それがリソースを返すとき、それから読むことができます。 – Barmar