Hi folks!

I've port the server part of the Java lib to PHP, so I've implemented a TServerTransport, TServerSocket, TServer, TSimpleServer, etc, and I'm testing with a PHP socket server. When I do a request on FreeBSD (7.2-RELEASE), it's handled correctly, but when I do a request on Mac OS X, the request is not handled correctly. I've modified the TBinaryProtocol::readI32() method to give more details on what's happening. It boils down to this method, because the problems occur right at the beginning of a message.

  public function readI32(&$value) {
    $data = $this->trans_->readAll(4);
    $arr = unpack('N', $data);
    $value = $arr[1];
    var_dump($arr);                             // added for debug
    printf("0x%x,0x%x\n", $data, $value);     // added for debug
    if ($value > 0x7fffffff) {
      $value = 0 - (($value - 1) ^ 0xffffffff);
    }
    return 4;
  }

On FreeBSD I got the following output:
array(1) {
  [1]=>
  int(-2147418111)
}
0x0,0x80010001
array(1) {
  [1]=>
  int(8)
}
0x0,0x8
array(1) {
  [1]=>
  int(0)
}
0x0,0x0


On Mac OS X I got the following output:
array(1) {
  [1]=>
  int(2147483647)
}
0x0,0x7fffffff


I think it has something to do with the OS/socket library.
Does anyone have some idea's?

If the community likes the PHP lib server stuff, I can clean up it a bit and publish a diff patch somewhere. I'd like also to add some sort of threaded server (which only will work on *NIX because the PHP pcntl extension).

Kind regards,
Anner.

--
Anner van Hardenbroek
[email protected]

Reply via email to