• 程序水果宝
    2019-09-02
    对于recvfrom函数,我们可以看成是TCP中accept函数和read函数的结合,前三个参数是read的参数,后两个参数是accept的参数。对于sendto函数,则可以看成是TCP中connect函数和send函数的结合,前三个参数是send的参数,后两个参数则是connect的参数。所以udp在发送和接收数据的过程中都会建立套接字连接,只不过每次调用sendto发送完数据后,内核都会将临时保存的对端地址数据删除掉,也就是断开套接字,从而就会出现老师所说的那个循环
    
     12
  • Liam
    2019-09-02
    按照老师的说法,只有connect才建立socket和ip地址的映射;那么,如果不进行connect,收到信息后内核又是如何把数据交给对应的socket呢

    作者回复: 在答疑篇里统一回复了。

     3
     4
  • 沉淀的梦想
    2019-09-04
    还是不太理解为什么UDP的sendto方法会有一个"连接"过程的性能损耗,直接按照目标地址发过去不就可以了吗?我的理解是操作系统会先用ICMP协议探一探目标地址是否存在,然后再用UDP协议发送具体的数据,不知道理解的对不?

    作者回复: 我不觉得会发ICMP来探一谈。ICMP是用的时候才触发的。

    这里我想表达的是操作系统协议栈在每次sendto的时候都会需要一个地址初始化的过程,如果这个过程省略掉了,是可以得到一点点性能的提升的。当然,其实这个是没有那么大的。

    
     2
  • 传说中的成大大
    2019-09-02
    udp 连接套接字 这个是什么过程? 断开套接字这又是什么过程呢?

    作者回复: 没有断开,这里都是一个系统调用,告诉了一些系统内核信息而已。

    
     2
  • GeekAmI
    2019-10-22
    问题1:亲测可以;
    问题2:可以参考https://yq.aliyun.com/articles/523036。

    作者回复: 👍

    
     1
  • 凤梨酥
    2019-11-12
    这个recvfrom得知icmp获取异常有时效性吗? 如果之前连接失败,下一秒服务端又打开了呢

    作者回复: 如果有重试,当然会有时效性。问题是大多数处理recvfrom的UDP程序不会考虑重试,因为是UDP,所以就会直接失败了。

    
    
  • 神秘的火柴人
    2019-11-11
    在 实现一个 connect 的客户端程序 章节中,“客户端 2 从操作系统内核得到了 ICMP 的错误,该错误在 recv 函数中返回,显示了“Connection refused”的错误信息“,这里的错误是在connect函数中返回吧

    作者回复: 是recv函数返回的,connection refused不只是connect函数会返回的。不信你可以运行一下试试。

    
    
  • 明翼
    2019-09-23
    老师我们遇到一个问题,A--》B发送UDP报文,发现在B上用tcpdump可以抓到udp报文信息,但是,用nc -ul 启动端口的却收不到报文,后面检查了下发现B上对A网段的路由走的是另外一个网卡eth1,而A发送到B的UDP包走的是eth0网卡,我把B上对A网段的路由改成也用eth0网卡,就正常了,请问老师是什么原因那?谢谢

    作者回复: B上的网卡eth0和eth1分别对应了不同的IP吧,两块网卡,A发送报文的时候指定不同的目标地址就可以了。

    
    
  • Leon📷
    2019-09-12
    老师 include "lib/common.h" 这个头文件在哪里

    作者回复: 在我给的代码lib文件夹下。

    
    
  • 沉淀的梦想
    2019-09-04
    在我电脑上,第一个案例的现象是阻塞在了connect函数上

    作者回复: 那是你没有开启服务器端程序吧,先开启服务器端,在开启客户端。

     1
    
  • W.jyao
    2019-09-03
    第一个留言的问题,程序不调用connect的话是因为recvfrom带有目标地址吧,

    作者回复: 我说的是多次调用connect哦,一次肯定是可以的。

    
    
  • gogo
    2019-09-02
    老师 文中提到的icmp报文 发源地 是本机的网卡吗?

    作者回复: 正常情况下应该是本机的网卡地址。

    
    
我们在线,来聊聊吧