博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.2 recvfrom和sendto函数
阅读量:6821 次
发布时间:2019-06-26

本文共 1447 字,大约阅读时间需要 4 分钟。

本节书摘来自异步社区《UNIX网络编程 卷1:套接字联网API(第3版)》一书中的第8章,第8.2节,作者:【美】W. Richard Stevens , Bill Fenner , Andrew M. Rudoff著,更多章节内容可以访问云栖社区“异步社区”公众号查看

8.2 recvfrom和sendto函数

这两个函数类似于标准的read和write函数,不过需要三个额外的参数。

#include 
ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags,          struct sockaddr *from, socklen_t *addrlen); ssize_t sendto(int sockfd, const void *buff, size_t nbytes, int flags, const struct sockaddr *to, socklen_t *addrlen);    均返回:若成功则为读或写的字节数,若出错则为-1

前三个参数sockfd、buff和nbytes等同于read和write函数的三个参数:描述符、指向读入或写出缓冲区的指针和读写字节数。

flags参数将在第14章中讨论recv、send、recvmsg和sendmsg等函数时再介绍,本章中重写简单的UDP回射客户/服务器程序用不着它们。时下我们总是把flags置为0。

sendto的to参数指向一个含有数据报接收者的协议地址(例如IP地址及端口号)的套接字地址结构,其大小由addrlen参数指定。recvfrom的from参数指向一个将由该函数在返回时填写数据报发送者的协议地址的套接字地址结构,而在该套接字地址结构中填写的字节数则放在addrlen参数所指的整数中返回给调用者。注意,sendto的最后一个参数是一个整数值,而recvfrom的最后一个参数是一个指向整数值的指针(即值-结果参数)。

recvfrom的最后两个参数类似于accept的最后两个参数:返回时其中套接字地址结构的内容告诉我们是谁发送了数据报(UDP情况下)或是谁发起了连接(TCP情况下)。sendto的最后两个参数类似于connect的最后两个参数:调用时其中套接字地址结构被我们填入数据报将发往(UDP情况下)或与之建立连接(TCP情况下)的协议地址。

这两个函数都把所读写数据的长度作为函数返回值。在recvfrom使用数据报协议的典型用途中,返回值就是所接收数据报中的用户数据量。

写一个长度为0的数据报是可行的。在UDP情况下,这会形成一个只包含一个IP首部(对于IPv4通常为20个字节,对于IPv6通常为40个字节)和一个8字节UDP首部而没有数据的IP数据报。这也意味着对于数据报协议,recvfrom返回0值是可接受的:它并不像TCP套接字上read返回0值那样表示对端已关闭连接。既然UDP是无连接的,因此也就没有诸如关闭一个UDP连接之类事情。

如果recvfrom的from参数是一个空指针,那么相应的长度参数(addrlen)也必须是一个空指针,表示我们并不关心数据发送者的协议地址。

recvfrom和sendto都可以用于TCP,尽管通常没有理由这样做。

转载地址:http://suvzl.baihongyu.com/

你可能感兴趣的文章
51.3. DELETE
查看>>
第 16 章 Computer terminal
查看>>
【NodeJS 学习笔记04】新闻发布系统
查看>>
Oracle pagination tips / Oracle分页技巧
查看>>
Httpclient简介
查看>>
[LeetCode] Paint House
查看>>
JScript中的"this"关键字使用方式补充
查看>>
WF4.0:使用IWorkflowInstanceExtension恢复书签
查看>>
java读取properties文件的几种方法
查看>>
05-Vue入门系列之Vue实例详解与生命周期
查看>>
基础才是重中之重~对象的生与死
查看>>
JavaScript的IIFE(即时执行方法)
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.4.5
查看>>
iOS - Localizable 国际化
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]5.1.6
查看>>
Linux 命令详解(十一)Shell 解析 json命令jq详解
查看>>
SpringBoot中如何自定义静态资源路径及映射
查看>>
[追加评论]三款SDR平台对比:HackRF,bladeRF和USRP
查看>>
dedecms提取某栏目及子栏目名称到首页怎么弄
查看>>
再遇1402,注册表权限问题
查看>>