[php] socket_set_nonblock probleempje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • knopper
  • Registratie: September 2001
  • Laatst online: 07-09 23:05

knopper

Sander Knopper

Topicstarter
Hoi allemaal,

Ik probeer een aangepaste versie v.d. talkback server die in de php documentatie staat zo aan te passen dat deze meerdere verbindingen ondersteunt. Nu gaat dit als ik het goed heb met de socket_set_nonblock functie.

Echter ik krijg steeds de fout: "Resource temporarily unavailable" als ik met socket_accept () probeer te werken.

Haal ik de regel weg die de socket op non-blocking zet dan werkt het zonder problemen.

Hier de code:

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
<?php

error_reporting (E_ALL);

set_time_limit (0);

if (!$sock = socket_create (AF_INET, SOCK_STREAM, SOL_TCP)) { echo "Couldn't create socket\n"; exit; }

if (!socket_set_option ($sock, SOL_SOCKET, SO_REUSEADDR, 1)) { echo "Couldn't set socket options.\n"; exit; }

if (!socket_set_nonblock ($sock)) { echo "Couldn't set to non-blocking\n"; exit; }

if (!socket_bind ($sock, "0.0.0.0", 15000)) { echo "Couldn't bind to socket\n"; exit; }

if (!socket_listen ($sock)) { echo "Couldn't listen on socket\n"; exit; }

while (true) {

        if (!$msgsock = @socket_accept ($sock)) { echo "socket_accept (): ".socket_strerror (socket_last_error ())."\n"; break; }

        $msg = "\nWelcome to the Knopper.TK talkback server, happy talking...\n\nType 'quit' to exit.\n\n";

        if (!@socket_write ($msgsock, $msg)) { echo "socket_write (): ".socket_strerror (socket_last_error ())."\n"; break; }

        while (true) {

                if (!$sockbuf = socket_read ($msgsock, 2048, PHP_NORMAL_READ)) { echo socket_strerror (socket_last_error ()); break 2; }

                $buf = trim ($sockbuf);

                if (strlen ($buf) > 0) {

                        switch ($buf) {

                                case "quit":

                                        socket_write ($msgsock, "See you later!\n\n");
                                        break 2;

                                default:

                                        socket_write ($msgsock, "You said: ".$buf."\n\n");
                                        break;
                        }
                }
        }

        socket_close ($msgsock);
}

socket_close ($sock);

?>

Acties:
  • 0 Henk 'm!

  • knopper
  • Registratie: September 2001
  • Laatst online: 07-09 23:05

knopper

Sander Knopper

Topicstarter
La maar, zit helemaal fout met mijn gedachtegang....:(

Dit stuk verklaart een hoop: http://www.zend.com/pecl/...=7099&open=1&anc=0&view=1


Misschien hebben andere mensen daar ook wat aan.