Asterisk Java AGI:utils.c write()返回错误:管道损坏

时间:2013-09-14 03:39:16

标签: java asterisk agi

我使用Java编写了一个hello world Asterisk AGI脚本。该脚本按预期运行并播放hello world声音文件,但星号控制台发出错误:

  

错误[31058]:utils.c:1164 ast_carefulwrite:write()返回错误:管道损坏

知道我做错了吗?

我正在使用asterisk-java-0.3.1.jar和Asterisk 1.8.10.1~dfsg-1ubuntu1

Java类如下:

import org.asteriskjava.fastagi.AgiChannel;
import org.asteriskjava.fastagi.AgiException;
import org.asteriskjava.fastagi.AgiRequest;
import org.asteriskjava.fastagi.BaseAgiScript;

public class AgiHelloWorld extends BaseAgiScript 
{
    @Override
    public void service(AgiRequest arg0, AgiChannel arg1) throws AgiException 
    {
        answer();
        streamFile("hello-world");
        hangup();
    }
}

2 个答案:

答案 0 :(得分:6)

当脚本完成执行后,Asterisk尝试将某些行写入AGI / FastAGI时会发生此错误。

通常,星号发送标头,然后等待命令。每个命令后星号发送一个响应。但是这里有一个例外,它在更多行上写了

HANGUP

我认为这是你的案子中写的星号行。您可以通过打开agi debug来检查它。在控制台中写:

agi set debug on

然后在运行脚本之后你会看到类似这样的内容:

    -- <SIP/XXXX-0000007c>AGI Script YOUR_AGI_NAME completed, returning 4
<SIP/XXXX-0000007c>AGI Tx >> HANGUP
ERROR[1502]: utils.c:1232 ast_carefulwrite: write() returned error: Broken pipe

您可以看到星号尝试在脚本完成后发送HANGUP。你不必担心它,但这是一个库错误。

答案 1 :(得分:-3)

如果您没有访问权限,通常会发生此错误,请以root用户身份登录,并尝试您将成功。