【问题标题】:Asterisk Java AGI: utils.c write() returned error: Broken pipeAsterisk Java AGI: utils.c write() 返回错误: Broken pipe
【发布时间】:2013-09-14 03:39:15
【问题描述】:

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

ERROR[31058]: utils.c:1164 ast_carefulwrite: write() 返回错误: Broken pipe

知道我做错了什么吗?

我正在使用 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();
    }
}

【问题讨论】:

    标签: java asterisk agi


    【解决方案1】:

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

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

    HANGUP
    

    我认为这是星号在您的情况下不能写的行。您可以通过打开 agi 调试来检查它。在控制台中写入:

    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。您不必担心,但这是一个库错误。

    【讨论】:

    • 是的!就是这样。 Asterisk 为每个发送的命令生成一个结果消息,并期望它由 agi 脚本处理。如果脚本没有读取返回的结果,星号会抛出上面的错误。
    【解决方案2】:

    这个错误一般是在你没有访问权限的情况下出现的,请以root用户登录试试就可以成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2019-06-24
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多