一些读书笔记(4)
来源:互联网 发布:windows关机指令 编辑:程序博客网 时间:2024/05/22 06:35
1. UDP是面向无连接的,那么,我为什么要在它的socket上建立连接呢?UDP调用connect会有三次捂手过程吗?UDP调用sendto后,返回成功,并没有意味着数据发送到对端,而是仅仅表示接口输出队列具有存放sendto导致的数据包的空间,即使不可达对端。不可达到对端的ICMP错误,并不是sendto返回,而是为一个异步错误。为了解决这个问题,解决的办法是,只有在一个已经connect的UDP端口上,这些异常错误才会返回给进程。而这个过程是不存在三次握手的过程。但是事实上,未连接的UDP套接口,和已经连接的UDP套接口在读写接口的调用上也发生了变化。表现如下:
a. 不能通过sendto指定目的IP地址和端口号发送数据,而是改用write或send。或将sendto的目的地址指针设为NULL。
b. 不用recvfrom获得数据包的发送者,改用read、recv或recvmsg。
c. 本点正式所需要的功能,即由已经连接的UDP引发的错误直接返回给进程。
2. 涉及到socket的I/O操作,也会涉及到超时问题,那么书中提到了三种方法设置超时:
a、使用alarm,当设置的alarm超时的时候,产生SIGALRM信号,应用程序对这个信号进行处理。
b、在select中堵塞等待I/O,用来直接堵塞在read或write上。
c、使用SO_RCVTIMEO或SO_SNDTIMEO选项,但并不是所有的系统都支持。
3. 套接口有几个相关的读写函数,对于从套接口接受数据的系统调用有read,readv,recvfrom和recvmsg,库函数有recv,对于向套接口发送数据的系统调用有write,writev,sendto和sendmsg,库函数有send;每个接口都有对应的特点,recv和send特点是,可以通过flags设置一些选项。MSG_DONTROUTE:告诉直连网络无需查找路由表;MSG_DONTWAIT:设置堵塞I/O;MSG_OOB:发送带外数据等。readv和writev表现在单个系统调用读入或写出到一个或多个缓冲区,成为分散读和集中写。
- 一些读书笔记(4)
- 一些读书笔记
- C语言深度解剖(精讲版)——读书笔记4 &&自己的一些理解
- 数据库设计的一些基本概念(读书笔记)
- 【读书笔记】如何撰写用例集的一些原则
- 关于目标文件的一些读书笔记
- 【读书笔记】一些名词注记--OpenGL
- 关于《mysql必知必会》的一些读书笔记
- 一般系统论--一些系统问题读书笔记
- 读书笔记4
- 读书笔记(4)
- 《没有任何接口》读书笔记_20041028:工作的一些要点
- 关于COM的一些浅显的认识(读书笔记)
- (读书笔记)MYSQL调优需要关注的一些状态值
- 【读书笔记】iOS-Xcode-模拟器操作的一些快捷键
- 学习JS中遇到的一些问题(读书笔记)
- 《c++ primer》读书笔记4
- 设计模式读书笔记(4)
- 1.窗体与界面设计
- Oracle存储过程中临时表的使用技巧
- 进程使用时间和内存的计算
- 让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)。
- Matlab中的simulink\If else模块
- 一些读书笔记(4)
- DB2常用命令
- 举例说明如何使用正则表达式去掉字符串中的一些特殊符号
- 谁调用了InvocationHandler 中的invoke方法?
- WPF之Binding基础一 UI Binding Source
- 备份:优秀博客文章
- wpa_supplicant-2.0交叉编译
- ptrace(PTRACE_PEEKUSER,pid,ORIG_EAX*4,NULL)
- Oracle 恢复 Java 时区数据工具tzupdater