[PHP] socket_create error.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo tweakers,

Na aantal uren googlen ga ik toch maar mn vraag hier stellen.
ik wil graag een socket maken met PHP daarvoor heb ik dit script deel:
PHP:
1
$sck_Main = socket_create(AF_UNIX, SOCK_STREAM, 0);

Alleen het rare is dat ik een fout krijg:
Warning: socket_create() [function.socket-create]: Unable to create socket [0]: An address incompatible with the requested protocol was used. in *** on line 2

Maar voor zover ik lees, en zie is het wel gewoon goed. http://php.net/manual/en/function.socket-create.php staat ook dat ik alles gewoon goed heb gedaan. In een reactie van kyle gibson staat het volgende:

PHP:
1
2
3
4
5
6
Took me about 20 minutes to figure out the proper arguments to supply for a AF_UNIX socket. Anything else, and I would get a PHP warning about the 'type' not being supported. I hope this saves someone else time.

<?php
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
// code
?>

http://server.kevinvdburgt.nl/__debug__.php
Maar nergens word er op gereageert waarom dat niet werk.
En zelf snap ik het ook niet. Heeft er iemand enig idee hoe dat probleem te verhelpen valt?

Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 19-09 20:56
Welke versie van php draai je? Een aantal staan bekend als buggy, denk aan 5.2.10, 5.3.0 en 5.3.1

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
freakingme schreef op vrijdag 13 augustus 2010 @ 02:06:
Welke versie van php draai je? Een aantal staan bekend als buggy, denk aan 5.2.10, 5.3.0 en 5.3.1
Ik draai versie 5.3.1

Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 19-09 20:56
Het is te lang geleden dat ik met sockets in php gewerkt heb om je te vertellen of er iets in je syntax fout is (maar ik neem aan dat je dat zelf ook al gechecked hebt ;)). Wel meen ik me iets te herinneren over socketproblemen in 5.3.1 (wat ook de reden is dat ik er naar vroeg), ik zou eens upgraden naar 5.3.3, en kijken of het dan nog steeds optreedt.

Of wachten tot iemand anders een intelligentere oplossing heeft :D

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
freakingme schreef op vrijdag 13 augustus 2010 @ 02:21:
Het is te lang geleden dat ik met sockets in php gewerkt heb om je te vertellen of er iets in je syntax fout is (maar ik neem aan dat je dat zelf ook al gechecked hebt ;)). Wel meen ik me iets te herinneren over socketproblemen in 5.3.1 (wat ook de reden is dat ik er naar vroeg), ik zou eens upgraden naar 5.3.3, en kijken of het dan nog steeds optreedt.

Of wachten tot iemand anders een intelligentere oplossing heeft :D
Heb even ge-update naar versie 5.3.3. maar dat heeft niet veel geholpen.

PS: Hier een linkje met de phpversion en phpinfo en wat test dingen.
http://server.kevinvdburgt.nl/__debug__.php

[ Voor 4% gewijzigd door Verwijderd op 13-08-2010 10:52 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Wat doet die 0 als derde argument?

Acties:
  • 0 Henk 'm!

  • ChickMagneet
  • Registratie: Juli 2010
  • Laatst online: 03-03-2024
Probeer anders eens:

PHP:
1
2
3
<?php
$sck_Main = socket_create(AF_INET, SOCK_STREAM, 0);
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ChickMagneet schreef op vrijdag 13 augustus 2010 @ 03:18:
Probeer anders eens:

PHP:
1
2
3
<?php
$sck_Main = socket_create(AF_INET, SOCK_STREAM, 0);
?>
Ja, die werkt wel, maar dan kan ik de functie socket_bind(); niet gebruiken.

Acties:
  • 0 Henk 'm!

  • michiel_
  • Registratie: Juli 2005
  • Niet online
Ben niet zo thuis in PHP, maar dat zijn toch totaal verschillende dingen?
PF_INET for network protocol IPv4 or
PF_INET6 for IPv6.
PF_UNIX for local socket (using a file).
edit: voor inet is hier gewoon een simpel voorbeeld: http://devzone.zend.com/article/1086

[ Voor 15% gewijzigd door michiel_ op 13-08-2010 10:53 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

freakingme schreef op vrijdag 13 augustus 2010 @ 02:06:
Welke versie van php draai je? Een aantal staan bekend als buggy, denk aan 5.2.10, 5.3.0 en 5.3.1
Echt niet zo "buggy" dat gewoon de hele socketfunctionaliteit totaal niet werkt, hoor :)
GlowMouse schreef op vrijdag 13 augustus 2010 @ 02:49:
Wat doet die 0 als derde argument?
The protocol parameter sets the specific protocol within the specified domain to be used when communicating on the returned socket. The proper value can be retrieved by name by using getprotobyname(). If the desired protocol is TCP, or UDP the corresponding constants SOL_TCP, and SOL_UDP can also be used.
:)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En daar staat in:
In Windows, PHP Sockets can be activated by un-commenting extension=php_sockets.dll in php.ini
Heb je dat al gedaan? ;)

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
GlowMouse schreef op vrijdag 13 augustus 2010 @ 02:49:
Wat doet die 0 als derde argument?
code:
1
2
3
4
5
6
7
8
9
10
11
ip: 0
icmp: 1
ggp: 3
tcp: 6
egp: 8
pup: 12
udp: 17
hmp: 20
xns-idp: 22
rdp: 27
rvd: 66


0 is voor de protocol IP.

Maar ook als ik die verander werkt het niet.
Voutloos schreef op vrijdag 13 augustus 2010 @ 10:59:
[...]
En daar staat in:
[...]

Heb je dat al gedaan? ;)
Jaah (a) dat had ik al gedaan ;)

[ Voor 24% gewijzigd door Verwijderd op 13-08-2010 11:02 ]


Acties:
  • 0 Henk 'm!

  • michiel_
  • Registratie: Juli 2005
  • Niet online
Ik zie net dat je op je link de code onderaan hebt staan.

Je onderste stukje code (Mooi/niet mooi) is toch prima? Mocht je TCP willen ipv UDP (in meeste gevallen wil je dat):
PHP:
1
    $sock = socket_create(AF_INET, SOCK_STREAM, 0);

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
michiel_ schreef op vrijdag 13 augustus 2010 @ 11:18:
Ik zie net dat je op je link de code onderaan hebt staan.

Je onderste stukje code (Mooi/niet mooi) is toch prima? Mocht je TCP willen ipv UDP (in meeste gevallen wil je dat):
PHP:
1
    $sock = socket_create(AF_INET, SOCK_STREAM, 0);
Ja, maar ik was eigelijk bezig met een tutorial. En die socket moet eigenlijk worden opgeslagen. Zodat ik het kan aanroepen zonder dat de pagina de gehele tijd actief is.

Acties:
  • 0 Henk 'm!

  • ChickMagneet
  • Registratie: Juli 2010
  • Laatst online: 03-03-2024
Moet je per se IP (0) als protocol gebruiken? Probeer eens SOL_TCP of SOL_UDP. (Moet wel samen met AF_INET)

Acties:
  • 0 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 13:59

DexterDee

I doubt, therefore I might be

Je geeft de vlag AF_UNIX mee, waarmee je een Unix Domain Socket wil maken. Dit is niet een netwerk socket, maar een named pipe, waarmee je via file descriptors gegevens tussen twee processen kunt uitwisselen.

Ik kan mij vergissen, maar het hele concept Unix Domain Sockets is op Windows helemaal niet uitgewerkt en PHP geeft er derhalve ook geen ondersteuning op. De foutmelding die je krijgt lijkt me PHP die je wil vertellen dat dit type socket niet beschikbaar is. Unix domain sockets zijn een onderdeel van de POSIX OS standaarden, wat door Windows zéer minimaal ondersteund wordt.

Om dit wel te laten werken heb je dus een Linux, FreeBSD of ander *nix systeem nodig waar PHP op draait.

Overigens, als je een netwerk socket (TCP/IP) wil opzetten, kan dat uiteraard wel in PHP onder Windows. Ik raad je dan wel aan de modernere stream* classes te gebruiken. Deze zijn ook wat simpeler in gebruik.

Een voorbeeld:
PHP:
1
$fp = stream_socket_client("tcp://www.tweakers.net:80", $errno, $errstr, 30);

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
DexterDee schreef op vrijdag 13 augustus 2010 @ 17:37:
Je geeft de vlag AF_UNIX mee, waarmee je een Unix Domain Socket wil maken. Dit is niet een netwerk socket, maar een named pipe, waarmee je via file descriptors gegevens tussen twee processen kunt uitwisselen.

Ik kan mij vergissen, maar het hele concept Unix Domain Sockets is op Windows helemaal niet uitgewerkt en PHP geeft er derhalve ook geen ondersteuning op. De foutmelding die je krijgt lijkt me PHP die je wil vertellen dat dit type socket niet beschikbaar is. Unix domain sockets zijn een onderdeel van de POSIX OS standaarden, wat door Windows zéer minimaal ondersteund wordt.

Om dit wel te laten werken heb je dus een Linux, FreeBSD of ander *nix systeem nodig waar PHP op draait.

Overigens, als je een netwerk socket (TCP/IP) wil opzetten, kan dat uiteraard wel in PHP onder Windows. Ik raad je dan wel aan de modernere stream* classes te gebruiken. Deze zijn ook wat simpeler in gebruik.

Een voorbeeld:
PHP:
1
$fp = stream_socket_client("tcp://www.tweakers.net:80", $errno, $errstr, 30);
Heel erg bedankt! ik ben weer wat wijzer geworden. Zal op mijn thuis windowsserver een Virtual server installeren met linux erop, zodat ik ermee verder kan.
Pagina: 1