UDP连接调用connect()函数
来源:互联网 发布:做标准件网络销售需要 编辑:程序博客网 时间:2024/06/05 17:26
转自“鱼思故渊”大牛的博客,原地址为:
http://blog.csdn.net/yusiguyuan/article/details/46890141
UDP是一个无连接的协议,它没有像TCP中EOF之类的东西。
8.11 UDP的connect函数
除非套接字已连接,否则异步错误是不会反悔到UDP套接字的。我们确实可以给UDP套接字调用connect,然而这样做的结果却与TCP连接不同的是没有三路握手过程。内核只是检查是否存在立即可知的错误,记录对端的IP地址和端口号,然后立即返回调用进程。
对于已连接UDP套接字,与默认的未连接UDP套接字相比,发生了三个变化。
其实一旦UDP套接字调用了connect系统调用,那么这个UDP上的连接就变成一对一的连接,但是通过这个UDP连接传输数据的性质还是不变的,仍然是不可靠的UDP连接。一旦变成一对一的连接,在调用系统调用发送和接受数据时也就可以使用TCP那一套系统调用了。
其实一旦UDP套接字调用了connect系统调用,那么这个UDP上的连接就变成一对一的连接,但是通过这个UDP连接传输数据的性质还是不变的,仍然是不可靠的UDP连接。一旦变成一对一的连接,在调用系统调用发送和接受数据时也就可以使用TCP那一套系统调用了。
(1)我们再也不能给输出操作指定目的IP地址和端口号。也就是说,我们不使用sendto,而改用write或send。写到已连接UDP套接字上的任何内容都自动发送到由connect指定的协议地址。可以给已连接的UDP套接字调用sendto,但是不能指定目的地址。sendto的第五个参数必须为空指针,第六个参数应该为0.
(2)不必使用recvfrom以获悉数据报的发送者,而改用read、recv或recvmsg。在一个已连接UDP套接字上,由内核为输入操作返回的数据报只有那些来自connect指定协议地址的数据报。这样就限制一个已连接UDP套接字能且仅能与一个对端交换数据报。
(3)由已连接UDP套接字引发的异步错误会返回给它们所在的进程,而未连接的UDP套接字不接收任何异步错误。
来自任何其他IP地址或断开的数据报不投递给这个已连接套接字,因为它们要么源IP地址要么源UDP端口不与该套接字connect到的协议地址相匹配。
UDP客户进程或服务器进程只在使用自己的UDP套接字与确定的唯一对端进行通信时,才可以调用connect。调用connect的通常是UDP客户,不过有些网络应用中的UDP服务器会与单个客户长时间通信TFTP,这种情况下,客户和服务器都可能调用connect。
DNS提供了一个例子 DNS服务器进程通常是处理客户请求的,因此服务器进程不能调用connect。
8.11.1给一个UDP套接字多次调用connect
拥有一个已连接UDP套接字的进程可出于下列两个目的之一再次调用connect:指定新的IP地址和端口号。端口套接字。
为了断开一个已UDP套接字连接,再次调用connect时把套接字地址结构的地址族设置为AF_UNSPEC。
当应用进程知道自己要给同一目的地址发送多个数据报时,显式连接套接字效率更高。调用connect后调用两次write涉及内核执行
1连接套接字
2输出第一个数据报
3输出第二个数据报
8.13UDP缺乏流量控制
UDP套接字接收缓冲区
由UDP给某个特定套接字排队的UDP数据报数目受限于该套接字接收缓冲区的大小。可以使用SO_RCVBUF套接字选项修改该值。
0 0
- UDP连接调用connect()函数
- UDP连接调用connect()函数
- udp 调用connect函数
- UDP调用connect函数
- 在UDP套按字上调用Connect建立连接
- 在UDP套按字上调用Connect建立连接
- 在UDP套按字上调用Connect建立连接
- 在UDP套按字上调用Connect建立连接
- linux udp之connect函数-连接的udp
- udp connect 有连接
- UDP调用connect
- UDP的connect函数
- UDP需要connect函数
- UDP调用connect()的作用
- UDP 调用 connect的作用
- UDP 调用 connect的作用
- UDP调用connect()作用
- UDP使用connect系统调用
- Multinomial Logit Model (MNL) 模型R语言nnet包multinom函数实现实例
- Windows消息对Edit控件的处理
- 用R做中文文本分析--用R进行文本挖掘与分析:分词、画词云
- Mac OS X,下载并安装ant
- 第40篇 WebRTC(三)
- UDP连接调用connect()函数
- 【20.73%】【CF 716B】Complete the Word
- 【物联网(IoT)开发】Arduino IDE的工具>开发板菜单中找到我的开发板型号怎么办?
- 读过的文章 2016-09-18
- hdu 5884 Sort(优先队列)
- 【67.23%】【CF 716A】Crazy Computer
- hdu5890 bitset优化dp
- 超棒的展示设计
- Some Monitoring and Troubleshooting Tools on JDK