Send和Recv两个调用的底层原理以及UDP中recvfrom和sendto接收和发送数据的方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YL970302/article/details/90083447

   send和recv是利用建立好的TCP连接进行数据据的发送和接收的系统调用。send负责将要发送的数据写入对应套接字文件描述符的发送缓冲区中,send成功并不代表数据就成功的发送到了对端,其实send的返回值是实际写入发送缓冲区的字节数,什么时候发送给对端由底层协议完成。如果缓冲区满则有可能阻塞send.send在内核中最终通过_sock_sendmsg,将数据写入相应的缓冲区中。recv是从文件描述符对应的接收缓冲区,读取数据,读取多少由缓冲区当前数据量和应用程序期望读取的字节数决定,取小者。recv在内核中最终是通过_sock_recvmsg,从缓冲区中读取到数据,再拷贝到用户空间

send和recv是对流式数据读写的。

UDP中的数据接收和发送是通过recvfrom和sendto来实现的

recvfrom:该函数用数据报发送者的协议地址装填由from所指的套接口地址结构,存储在此套接口地址结构中的字节数也以addrlen所指的整数返回给调用者。

sendto:该函数的参数to是一个含有数据将发往的协议地址(例如:IP地址和端口号)的套接口地址结构,它的大小由addrlen来指定

两个函数都以读写数据的长度作为函数返回值

猜你喜欢

转载自blog.csdn.net/YL970302/article/details/90083447