socket_bind()无法绑定地址

时间:2013-02-23 14:20:56

标签: php linux webserver websocket

我正在尝试为我正在处理的小项目创建Web套接字服务器。

我已经设置了服务器(位于家中)并将端口转发80和22.我阅读了本教程:here

每当我ssh到我的服务器上运行“startDarmon.php”时,我都会收到以下错误:

PHP Warning:  socket_bind(): unable to bind address [98]: Address already in use in  
/var/www/server/socket.class.php on line 48
2013-02-23 14:15:38 System: Socket bound to localhost:8000.
2013-02-23 14:15:38 System: Start listening on Socket

这是我认为阻止我的客户端连接到服务器。所以在startDarmon.php文件中我有:

$WebSocket = new socketWebSocket('MY_IP_NOT_LAN_IP',8000);

在我的客户端文件中,我有:

var host = "ws://MY_IP_NOT_LAN:8000/server/startDaemon.php";

有没有人对为什么不允许我建立连接有任何建议?

3 个答案:

答案 0 :(得分:6)

我猜这个问题出在Linux服务器上。

在root下运行netstat -a -p -n命令(例如使用sudo)以了解正在使用该端口的进程。然后也许setsockopt(2)SO_REUSEADDR一起做 (有关详细信息,请参阅socket(7)。)

TCP协议在几分钟内有一些指定的延迟(例如keepalive等等......)。参见例如tcp(7)

我建议你阅读一本关于Linux系统编程的好书,如Advanced Linux Programming,也许还有一些关于网络编程的资料。

答案 1 :(得分:3)

您可以使用以下设置重复使用地址:

if ( ! socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) 
{ 
    echo socket_strerror(socket_last_error($sock)); 
    exit; 
}

答案 2 :(得分:2)

另一个应用程序已经在使用您尝试使用的端口。您可以运行

lsof -i:port_no

使端口免费。