Sherif Posted January 10, 2012 Share Posted January 10, 2012 Hi everyone! I'm trying to create a socket TCP/IP server, i used this code which is already available @ php.net <?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 = '0.0.0.0; $port = 5000; if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) == false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "<br \>"; } if (socket_bind($sock, $address, $port) == false) { echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "<br \>"; } if (socket_listen($sock, 5) == false) { echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "<br \>"; } do { socket_set_nonblock($sock); if (($msgsock = socket_accept($sock)) == false) { echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "<br \>"; socket_clear_error(); break; } /* Send instructions. */ $msg = "\nWelcome to the PHP Test Server. <br \>" . "To quit, type 'quit'. To shut down the server type 'shutdown'.<br \>"; socket_write($msgsock, $msg, strlen($msg)); do { if (false == ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) { echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "<br \>"; break 2; } if (!$buf = trim($buf)) { continue; } if ($buf == 'quit') { break; } if ($buf == 'shutdown') { socket_close($msgsock); break 2; } $talkback = "PHP: You said '$buf'.<br \>"; socket_write($msgsock, $talkback, strlen($talkback)); echo "$buf<br />"; } while (true); socket_close($msgsock); } while (true); socket_close($sock); ?> I've assigned the address to receive from anybody '0.0.0.0' The problem is that it tells me: socket_accept() failed: reason: Success I searched a lot trying to figure this error out but found nothing. Any help, i'd be thankful? Quote Link to comment https://forums.phpfreaks.com/topic/254726-socket-server-via-php/ Share on other sites More sharing options...
kicken Posted January 10, 2012 Share Posted January 10, 2012 If socket has been made non-blocking using socket_set_blocking() or socket_set_nonblock(), FALSE will be returned. Your socket is in non-blocking mode so your socket accept call will return false immediately when there is no connection pending. You need to determine if the failure is due to that, or due to an actual error. socket_last_error will help with that. Either that, or don't use non-blocking sockets. Quote Link to comment https://forums.phpfreaks.com/topic/254726-socket-server-via-php/#findComment-1306287 Share on other sites More sharing options...
Sherif Posted January 11, 2012 Author Share Posted January 11, 2012 I added this function recently after so many trials without it! The webpage loads forever and never connects to the client which i appointed the HyperTerminal to be mine. Quote Link to comment https://forums.phpfreaks.com/topic/254726-socket-server-via-php/#findComment-1306413 Share on other sites More sharing options...
trq Posted January 11, 2012 Share Posted January 11, 2012 What web page? Servers need to be started via php's cli, the code you posted should not be executed as a web page. Quote Link to comment https://forums.phpfreaks.com/topic/254726-socket-server-via-php/#findComment-1306416 Share on other sites More sharing options...
Sherif Posted January 11, 2012 Author Share Posted January 11, 2012 Well! What do you mean? I'm utterly new to php!! Quote Link to comment https://forums.phpfreaks.com/topic/254726-socket-server-via-php/#findComment-1306420 Share on other sites More sharing options...
trq Posted January 11, 2012 Share Posted January 11, 2012 cli. Quote Link to comment https://forums.phpfreaks.com/topic/254726-socket-server-via-php/#findComment-1306425 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.