fsockopen using main ip
Hi,

i have a dedicated server with Ensim virtual hosting on it.
The server has 50 ip based sites.
all 50 sites have php scripts that use the fsockopen function
instead of using the sites own ip address... the fsockopen function uses the main server ip address...
for example:
site 1 ip: 12.12.12.1
site 2 ip: 12.12.12.2
.....
site n ip: 12.12.12.n
main server ip: 66.12.12.12
fsockopen uses the main server ip for requests from all 50 sites..
i would like fsockopen to use each individual sites ip to make outgoing connections..
all the 50 ip sites connect to similar servers and the use of main ip by fsockopen makes its seem like one person is accessing all the data...

this problem is driving me crazy... i would greatly appreciate any insight on how i can fix this..
my server = linux, apache, php 4.2.2
Ensim Environment
I am soooo troubled by this...

    This sounds impossible unless your Ensim virtual hosting has NAT (network address translation) built in.

    Your sites are virtual.. they are not tied to a physical IP by themselves, they are all tied to the ip of the server.. that's why they are virtual...

    Unless your Ensim is capable of rewriting ip addresses (which I kinda doubt) all those socket connections ARE comming from one IP and port.

    You can try to play with the actual scket classes, as in the manual (see the talkback server example from the manual here..) but fsockopen() won't be able to play with virtual sockets.

    <?php
    error_reporting (E_ALL);

    / Allow the script to hang around waiting for connections. /
    set_time_limit (0);

    / Turn on implicit output flushing so we see what we're getting
    as it comes in. */
    ob_implicit_flush ();

    $address = '192.168.1.53';
    $port = 10000;

    if (($sock = socket_create (AF_INET, SOCK_STREAM, 0)) < 0) {
    echo "socket_create() failed: reason: " . socket_strerror ($sock) . "\n";
    }

    if (($ret = socket_bind ($sock, $address, $port)) < 0) {
    echo "socket_bind() failed: reason: " . socket_strerror ($ret) . "\n";
    }

    if (($ret = socket_listen ($sock, 5)) < 0) {
    echo "socket_listen() failed: reason: " . socket_strerror ($ret) . "\n";
    }

    do {
    if (($msgsock = socket_accept($sock)) < 0) {
    echo "socket_accept() failed: reason: " . socket_strerror ($msgsock) . "\n";
    break;
    }
    / Send instructions. /
    $msg = "\nWelcome to the PHP Test Server. \n" .
    "To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
    socket_write($msgsock, $msg, strlen($msg));

    do {
    if (FALSE === ($buf = socket_read ($msgsock, 2048))) {
    echo "socket_read() failed: reason: " . socket_strerror ($ret) . "\n";
    break 2;
    }
    if (!$buf = trim ($buf)) {
    continue;
    }
    if ($buf == 'quit') {
    break;
    }
    if ($buf == 'shutdown') {
    socket_close ($msgsock);
    break 2;
    }
    $talkback = "PHP: You said '$buf'.\n";
    socket_write ($msgsock, $talkback, strlen ($talkback));
    echo "$buf\n";
    } while (true);
    socket_close ($msgsock);
    } while (true);

    socket_close ($sock);
    ?>

      Write a Reply...