我對PHP非常陌生,所以這可能很簡單。無論如何,我試圖創建一個PHP腳本(由Web客戶端激活)和本地進程(用C++編寫)之間的雙向通信。 PHP腳本應該發送一些信息給C++進程,然後等待響應。我的問題是設置這種通信的唯一方法似乎是使用socket_bind,但是當我這樣做時,它會因'地址已被使用'錯誤而失敗。有問題的套接字文件/ tmp/sock已經由連續運行的C++進程創建(它不能由PHP腳本啓動)。如果我使用socket_connect並且只是寫了一些東西給C++進程,那工作得很好;但是我需要綁定,然後才能從PHP腳本中收聽該套接字。這裏是我的代碼:從PHP腳本無法綁定到套接字
<?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();
//Adapted from http://www.php.net/manual/en/sockets.examples.php
if (($sock = socket_create(AF_UNIX, SOCK_STREAM,0)) === false)
{
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
exit();
}
if (socket_bind($sock, '/tmp/sock') === false) //Fails here
{
echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}
....
Thanks--
謝謝 - 我添加socket_set_option($ sock,SOL_SOCKET,SO_REUSEADDR,1)到我的腳本中,雖然它沒有返回無效操作錯誤,但我仍然遇到同樣的問題。還有什麼我需要做的C + +(Qt)?我之前使用過QLocalSockets,沒有任何關於共享的明確信息,而且沒有問題。/tmp/sock是777,權限明智。 – 2011-04-22 13:49:10
@ matt-phillips:如果你運行你的php腳本,等2分鐘,然後重新運行它會發生什麼? – 2011-04-22 13:53:12
@Heandel沒有變化。 – 2011-04-22 13:59:00