sendto没有在VxWorks上工作

时间:2010-10-16 13:59:27

标签: sockets vxworks sendto

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

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

  • 我是以某种方式缓冲的UDP数据?

  • 另一项任务是否可以阻止sendto发送? (不要在这里进行疯狂的追逐,但是我的任务是以正常的优先级为我的应用程序,即在网络任务等关键任务之下......所以这很好)。

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

  • 我已经设置了我的路由表... pinging有效!

  • 没有防火墙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 ....
   }

1 个答案:

答案 0 :(得分:1)

我相信ERROR被定义为-1,对吗?那你在检查sendto(2)电话的返回值吗? errno(3)值怎么样?

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