UDP是一个无连接的协议,它没有像TCP中EOF之类的东西。



8.11 UDP的connect函数
除非套接字已连接,否则异步错误是不会反悔到UDP套接字的。

我们确实能够给UDP套接字调用connect,然而这样做的结果却与TCP连接不同的是没有三路握手过程。内核仅仅是检查是否存在马上可知的错误。记录对端的IP地址和port号,然后马上返回调用进程。



对于已连接UDP套接字,与默认的未连接UDP套接字相比,发生了三个变化。

事实上一旦UDP套接字调用了connect系统调用,那么这个UDP上的连接就变成一对一的连接,可是通过这个UDP连接数据传输的性质还是不变的,仍然是不可靠的UDP连接。一旦变成一对一的连接。在调用系统调用发送和接受数据时也就能够使用TCP那一套系统调用了。

(1)我们再也不能给输出操作指定目的IP地址和port号。也就是说,我们不使用sendto,而改用write或send。

写到已连接UDP套接字上的不论什么内容都自己主动发送到由connect指定的协议地址。能够给已连接的UDP套接字调用sendto。可是不能指定目的地址。sendto的第五个參数必须为空指针。第六个參数应该为0.

(2)不必使用recvfrom以获悉数据报的发送者,而改用read、recv或recvmsg。在一个已连接UDP套接字上,由内核为输入操作返回的数据报仅仅有那些来自connect指定协议地址的数据报。这样就限制一个已连接UDP套接字能且仅能与一个对端交换数据报。

(3)由已连接UDP套接字引发的异步错误会返回给它们所在的进程,而未连接的UDP套接字不接收不论什么异步错误。
来自不论什么其它IP地址或断开的数据报不投递给这个已连接套接字。由于它们要么源IP地址要么源UDPport不与该套接字connect到的协议地址相匹配。

UDP客户进程或server进程仅仅在使用自己的UDP套接字与确定的唯一对端进行通信时,才干够调用connect。调用connect的一般是UDP客户,只是有些网络应用中的UDPserver会与单个客户长时间通信TFTP,这样的情况下。客户和server都可能调用connect。

DNS提供了一个样例 DNSserver进程一般是处理客户请求的。因此server进程不能调用connect。


8.11.1给一个UDP套接字多次调用connect
拥有一个已连接UDP套接字的进程可出于下列两个目的之中的一个再次调用connect:指定新的IP地址和port号。

port套接字。

为了断开一个已UDP套接字连接,再次调用connect时把套接字地址结构的地址族设置为AF_UNSPEC。


当应用进程知道自己要给同一目的地址发送多个数据报时。显式连接套接字效率更高。调用connect后调用两次write涉及内核运行
1连接套接字
2输出第一个数据报
3输出第二个数据报

8.13UDP缺乏流量控制
UDP套接字接收缓冲区
由UDP给某个特定套接字排队的UDP数据报数目受限于该套接字接收缓冲区的大小。能够使用SO_RCVBUF套接字选项改动该值。

UDP连接调用connect()函数的更多相关文章

  1. udp调用connect有什么作用(转)

    原文链接如下: http://blog.csdn.net/wannew/article/details/18218619 整理一下.1:UDP中可以使用connect系统调用 2:UDP中connec ...

  2. DLL模块例2:使用__declspec(dllexport)导出函数,extern "C"规范修饰名称,隐式连接调用dll中函数

    以下内容,我看了多篇文章,整合在一起,写的一个例子,关于dll工程的创建,请参考博客里另一篇文章:http://www.cnblogs.com/pingge/articles/3153571.html ...

  3. connect函数的用法

    无论流式套接字(如TCP)还是数据报(如UDP),均可以使用connect函数.对于流式套接字,使用connect函数后,建立固定地址的连接,之后可以使用send/rev函数进行数据收发.对于数据报, ...

  4. connect函数

    TCP客户用connect函数来建立与TCP服务器的连接 int connect (int sockfd, const sockaddr * servaddr, socklen_t addrlen); ...

  5. 网络编程:connect函数

    TCP客户用connect函数来建立与TCP服务器的连接: cpp #include<sys/socket.h> int connect(int sockfd, const struct ...

  6. connect()函数阻塞问题

    方法一:采用select 在学习嵌入式Linux网络编程中,很多同学都发现了一个问题,那就是调用connect函数时,如果服务端关闭,客户 端调用connect()函数时,发现阻塞在那里,而且利用ct ...

  7. UDP的connect函数

    UDP的connect没有三次握手过程,内核只是检测是否存在立即可知的错误(如一个显然不可达的目的地), 记录对端的的IP地址和端口号,然后立即返回调用进程. 未连接UDP套接字(unconnecte ...

  8. UNIX网络编程——UDP 的connect函数(改进版)

    上一篇我们提到,除非套接字已连接,否则异步错误是不会返回到UDP套接字的.我们确实可以给UDP套接字调用connect,然而这样做的结果却与TCP连接大相径庭:没有三次握手.内核只是检查是否存在立即可 ...

  9. 非阻塞socket调用connect, epoll和select检查连接情况示例

    转自http://www.cnblogs.com/yuxingfirst/archive/2013/03/08/2950281.html 我们知道,linux下socket编程有常见的几个系统调用: ...

随机推荐

  1. Python: PS 图像调整--颜色梯度

    本文用 Python 实现 PS 中的色彩图,可以看到颜色的各种渐变,具体的效果可以参考以前的博客: http://blog.csdn.net/matrix_space/article/details ...

  2. php基础:define()定义常数函数

    define(); 常量类似变量,不同之处在于: 在设定以后,常量的值无法更改 常量名不需要开头的美元符号 ($) 作用域不影响对常量的访问 常量值只能是字符串或数字 <?php define( ...

  3. 用Electron开发企业网盘(一)--通信

    效果展示 项目背景: 由于浏览器的限制,web批量下载体验不好以及无法下载文件夹.采用Electron技术,通过js开发PC应用程序,着力解决批量下载.断点续传.文件夹下载等问题.配合网页版网盘使用, ...

  4. Linux服务器性能评估与优化

    一.影响务器性能因素 影响企业生产环境Linux服务器性能的因素有很多,一般分为两大类,分别为操作系统层级和应用程序级别.如下为各级别影响性能的具体项及性能评估的标准: (1)操作系统级别 内存: C ...

  5. mysql主从同步错误恢复

    Mysql主从同步集群在生成环境使用过程中,如果主从服务器之间网络通信条件差或者数据库数据量非常大,容易导致MYSQL主从同步延迟. MYSQL主从产生延迟之后,一旦主库宕机,会导致部分数据没有及时同 ...

  6. 【模板】2-SAT 问题(2-SAT)

    [模板]2-SAT 问题 题目背景 2-SAT 问题 模板 题目描述 有n个布尔变量 \(x_1\)​ ~ \(x_n\)​ ,另有m个需要满足的条件,每个条件的形式都是" \(x_i\) ...

  7. WHU 1537 Stones I

    题目见: http://acm.whu.edu.cn/land/problem/detail?problem_id=1537 这个题相当无语,学长给的解法是:枚举取的个数k,然后对每个k贪心,取其中的 ...

  8. web——前后端通信原理

    前端向后台传输数据: 传输方法:post  get 区别: (1)get:用于从服务器获取数据,将参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看 ...

  9. LeetCode_Construct Binary Tree from Inorder and Postorder Traversal

    一.题目 Construct Binary Tree from Inorder and Postorder Traversal My Submissions Given inorder and pos ...

  10. xml方式封装通信数据方法

    xml方式封装通信数据方法 public static function xmlToEncode($data) { $xml = ""; foreach($data as $key ...