【问题标题】:sendto not working on VxWorkssendto 在 VxWorks 上不起作用
【发布时间】:2010-10-16 13:59:27
【问题描述】:

我之前问过这个问题,但没有解决(仍然有问题)。我被难住了,因为函数返回没有错误并且没有发送数据!此代码适用于 Linux ... VxWorks 版本不起作用(sendto 不发送,尽管它返回时没有错误)。

概要——我正在写一个简单的回显服务器——服务器成功接收 数据(来自 x86 盒子)并声称它已成功发送回。 但是客户端上没有收到数据(x86 上的 netcat)。这个 代码在 PowerPC 机器上的 VxWorks 5.4 上运行...

  • UDP 数据是否以某种方式被缓冲?

  • 是否有其他任务阻止 sendto 发送? (不要在这里胡思乱想,但我以正常的优先级来执行我的应用程序,即低于网络任务等关键任务......所以这很好)。

  • VxWorks 可以缓冲我的 UDP 数据吗?

  • 我已经设置了我的路由表... ping 正常!

  • 没有防火墙 AFAIK ...

  • sendto 的细微差别是什么,什么会阻止我的数据 到达客户...

    while(1)
    {
    readlen = recvfrom(sock, buf, BUFLEN, 0, (struct sockaddr *) &client_address, &slen);

    if (readlen == ERROR)
    {
        printf("RECVFROM FAILED()/n");
        return (ERROR);
    }

    printf("Received %d bytes FROM %s:%d\nData: %s\n\n",
           readlen, inet_ntoa(client_address.sin_addr),
    ntohs(client_address.sin_port), buf);

    // Send it to right back to the client using the open UDP socket
    // but send it to OUTPORT
    client_address.sin_port = htons(OUTPORT);

    // Remember slen is a value (not an address ... in, NOT in-out)
    sendlen = sendto(sock, buf, BUFLEN, 0, (struct sockaddr*)&client_address, slen);

    // more code ....
   }

【问题讨论】:

  • 仍在为此苦苦挣扎...确保我在启动时将 client_address 归零...这很奇怪...
  • 为什么要发送到不同的端口?
  • 发送到不同的端口应该没有问题...
  • 经过更多修改后,我开始怀疑防火墙...来自另一个 Linux Box(在关注的子网中)的 netcat 无法访问子网外的 Linux Box...防火墙或网关可能在做这个?
  • 不,没有错,只是想知道。

标签: sockets vxworks sendto


【解决方案1】:

我相信ERROR 被定义为-1,对吧?那你检查sendto(2) 调用的返回值吗? errno(3) 的值呢?

我在代码中看到的一个明显问题是您将 BUFLEN 作为要发送的消息的长度,而实际上应该是 readlen - 您收到的字节数。

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 2018-04-25
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2019-04-02
    • 1970-01-01
    • 2013-04-03
    相关资源
    最近更新 更多