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:
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); ?> |