jieao111 发表于 2012-11-15 17:52

问个sendto error

本帖最后由 jieao111 于 2012-11-15 17:56 编辑

我的代码        ret = recvfrom(*sk, &ack, sizeof(ack), 0, (struct sockaddr *)&mote, &slen);
        if(ret>0)
        {
                        ack_back=ack+1;
                        if(sendto(*sk, &ack_back, sizeof(ack_back),0,(const struct sockaddr*)&mote, sizeof(struct sockaddr)) == -1)
                        {
                                perror("recv_msg sendto error");
                                return -1;
                        }
         }我这个报错recv_msg sendto error: Network is unreachbale
我奇怪,我从这个地址收到消息,为什么我往地址返回信息就不行呢

linux_c_py_php 发表于 2012-11-15 20:12

(struct sockaddr *)&mote, &slen

slen赋值过吗?必须赋值成slen = sizeof(struct sockaddr_in), 否则slen是随机数太小了会把地址截断到mote里,slen是一个in/out参数。

jieao111 发表于 2012-11-15 21:23

回复 2# linux_c_py_php

赋值了,而且我之前还打印出来了发送端得地址,recv没有问题,关键在于sendto

ps,我写的nat穿透的程序,这个一个内网里的主机发来的消息,,可是我返回不去了,,理论上应该是可以返回的

   

linux_c_py_php 发表于 2012-11-16 11:27

理论上是可以的.

还有, sendto里建议sizeof(struct sockaddr_in), 因为sockaddr和sockaddr_in虽然在尺寸上一样, 但这并不是保证, 而且放到sendto里语义也不对.

chenmo20074639 发表于 2012-12-27 14:55

继续呀,高手们,我也遇到过这样的问题,一直没有解决,求高手帮忙:time:
页: [1]
查看完整版本: 问个sendto error