[PHP] Vreemde socket_bind error

Pagina: 1
Acties:
  • 173 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MrQcue
  • Registratie: Januari 2005
  • Laatst online: 20-09 14:32
Ik krijg met een simpel socket script op een lokale server nogal een vreemde error. Op een andere machine lijkt het allemaal wel goed te werken.

Het is de volgende warning:

PHP Warning: socket_bind(): unable to bind address [99]: Cannot assign requested address in /var/www/html/socket/index.php on line 26


De code ziet er alsvolgt uit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php

error_reporting(E_ERROR | E_WARNING | E_PARSE);

set_time_limit(0);
ob_implicit_flush();

$address = '192.168.1.120';
$port = 8888;

function handle_client($allclient, $socket, $buf, $bytes) {
    foreach($allclient as $client) {
        socket_write($client, "$socket wrote: $buf");
    }
}

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

if (!socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1)) {
    echo socket_strerror(socket_last_error($sock));
    exit;
} 

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

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

$read_sockets = array($master);

while (true) {
    $changed_sockets = $read_sockets;
    $num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL);
    foreach($changed_sockets as $socket) {
        if ($socket == $master) {
            if (($client = socket_accept($master)) < 0) {
                echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
                continue;
            } else {
                array_push($read_sockets, $client);
            }
        } else {
            $bytes = socket_recv($socket, $buffer, 2048, 0);
            if ($bytes == 0) {
                $index = array_search($socket, $read_sockets);
                unset($read_sockets[$index]);
                socket_close($socket);
            } else {
                $allclients = $read_sockets;
                array_shift($allclients);    // remove master
                handle_client($allclients, $socket, $buffer, $bytes);
            }
        }
       
    }
}


Als ik op google zoek zie ik maar weinig info over die specifieke code-> [99]

Ook op php.net zie ik weinig informatie in de user-comments van de betreffende functies.

Wie o wie kan mij vertellen wat deze melding betekent :)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Gebruik aub [php] [/php] tags. ;)

De error lijkt mij duidelijk zat, de socket (ip+poort) kan niet gebonden worden aan jouw app. Wellicht omdat deze al bezet is oid...

[ Voor 3% gewijzigd door Voutloos op 28-12-2007 14:18 ]

{signature}


Acties:
  • 0 Henk 'm!

  • MrQcue
  • Registratie: Januari 2005
  • Laatst online: 20-09 14:32
Ok, maar het lijkt wel niet uit te maken welk poort ik gebruik. Overigens zijn beide CentOS besturingssystemen. Kan het wellicht te maken hebben met de firewall ?

EDIT: mmm, Security level staat op disabled en SELinux staat ook op disabled....

[ Voor 20% gewijzigd door MrQcue op 28-12-2007 14:13 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Heb je genoeg rechten?

Acties:
  • 0 Henk 'm!

  • MrQcue
  • Registratie: Januari 2005
  • Laatst online: 20-09 14:32
Ik ben root die 'php index.php' uitvoert... ik heb voor de zekerheid een chmod 777 index.php toegepast zodat nu iedereen alle rechten tot de file heeft.

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Draait het PHP script wel op de server met het volgende IP adres als je de foutmelding krijgt, volgens mij geeft de foutmelding precies aan waar het het probleem moet zoeken.
PHP:
1
$address = '192.168.1.120';


Wellicht dat je even het IP adres van de betreffende server moet gebruiken?

En je zou ook eens met bijvoorbeeld netstat kunnen kijken of er al een service op poort 8888 draait. Heb je ook al een andere poort geprobeerd?

[ Voor 20% gewijzigd door Borizz op 28-12-2007 14:22 ]

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • MrQcue
  • Registratie: Januari 2005
  • Laatst online: 20-09 14:32
Ik voel me ineens heel dom. Ik zag inderdaad net dat het het verkeerde ip was.

Precies was Borizz hierboven al aangeeft.

Het werkt nu zoals het zo moeten. Thx!
Pagina: 1