2010-12-20 80 views

回答

0

您是否尝试过使用getprotobyname()作为第3个(协议)参数?

+0

用哪个参数? – 2010-12-20 13:25:21

+0

随着你想使用的协议的名称,我猜。在英语文档页面的评论是他们的列表:http://nl3.php.net/manual/en/function.getprotobyname.php – 2010-12-20 13:26:38

+0

我试过“udp”,这是我想要的,但得到了[ 93]:不支持协议。 – 2010-12-20 13:31:15

4

这是莫比过时的,但我发现,这样它正常工作:

$sock = stream_socket_client('unix:///tmp/test.sock', $errno, $errst); 
fwrite($sock, 'message'); 
$resp = fread($sock, 4096); 
fclose($sock); 
0

的第三个参数socket_create不正确,因此错误消息。

它应该是socket_create(AF_INET,SOCK_DGRAM,SOL_UDP);

您指定的值0对应于SOL_IP,它不是PHP中支持的协议。

+0

不,原因是它不应该在SOCK_DGRAM套接字上使用'socket_connect'。而你的'AF_INET'与unix域套接字上的问题无关 – 2017-04-14 19:56:07

1

对于Unix套接字,我们不需要使用socket_connect

这里是一个发送者和接收者一个非常简单的工作示例:

sender.php

<?php 
$socket = socket_create(AF_UNIX, SOCK_DGRAM, 0); 
socket_sendto($socket, "Hello World!", 12, 0, "/tmp/myserver.sock", 0); 
echo "sent\n"; 
?> 

receiver.php

<?php 

$file = "/tmp/myserver.sock"; 
unlink($file); 

$socket = socket_create(AF_UNIX, SOCK_DGRAM, 0); 

if (socket_bind($socket, $file) === false) { 
    echo "bind failed"; 
} 

if (socket_recvfrom($socket, $buf, 64 * 1024, 0, $source) === false) { 
    echo "recv_from failed"; 
} 

echo "received: " . $buf . "\n"; 

?> 

请注意,只有接收器需要绑定到一个地址(unix套接字文件),然后使用socket_recvfrom。发件人只需致电socket_sendto

+0

在php和C中检查这个[另一个答案](http://stackoverflow.com/a/43421610/4626775)工作示例 – 2017-04-15 03:14:00

相关问题