UDP的connect没有三次握手过程,内核只是检测是否存在立即可知的错误(如一个显然不可达的目的地),

记录对端的的IP地址和端口号,然后立即返回调用进程。

未连接UDP套接字(unconnected UDP socket):新创建UDP套接字默认如此;

已连接UDP套接字(connected UDP socket):对UDP套接字调用connect的结果。

对于已连接UDP套接字,与默认的未连接UDP套接字相比:

1)再不能给输出操作指定目的IP地址和端口号。

sendto改用write或send,写到已连接UDP套接字上的任何内容都自动发送到由connect指定的协议地址(如IP地址和端口号)。

已连接UDP套接字调用sendto,不能指定目的地址。其第五个参数必须为空指针,第六个参数应为0或不考虑。

2)可不使用recvfrom以获悉数据报的发送者,改用read、recv或recvmsg。

在已连接UDP套接字上,由内核为输入操作返回的数据报只有来自connect所制定协议地址的数据报。

这样就限制一个已连接UDP套接字能且仅能与一个对端交换数据报。

3)由已连接UDP套接字引发的异步错误会返回给它们所在的进程,而未连接UDP套接字不接受任何异步错误。

POSIX规范指出,在未连接UDP套接字上不指定目的地址的输出操作应该返回ENOTCONN,而不是EDESTADDRREQ。

应用进程首先调用connect指定对端的IP地址和端口号,然后使用read和write与对端进程交换数据。

来自任何其他IP地址或端口的数据报不投递给这个已连接套接字,UDP将丢弃它们并生成相应的ICMP端口不可达错误。

UDP客户进程或服务器进程只在使用自己的UDP套接字与确定的唯一对端进行通信时,才可以调用connect。

调用connect的通常是UDP客户,不过有些网络应用中的UDP服务器会与单个客户长时间通信(如TFTP),此时客户和服务器都有可能调用connect。

DNS客户、服务器与connect函数的例子:

用于一个已连接UDP套接字的进程可出于以下目的之一会再次调用connect:

1)指定新的IP地址和端口号

2)断开套接字

性能:当进程知道自己要给同一个目的地址发送多个数据报时,显式连接套接字效率更高。

而临时连接未连接的UDP套接字大约会消耗每个UDP传输三分之一的开销。

void dg_cli(FILE *fp, int sockfd, SA *pservaddr, socklen_t servlen)
{
int n;
char sendline[MAXLINE], recvline[MAXLINE + ];
if (connect(sockfd, (SA*)pservaddr, servlen) < ){
cout<<"conn error!"<<endl;
exit();
}
else
cout<<"conn succ!"<<endl; while (fgets(sendline, MAXLINE, fp) != NULL){
if (write(sockfd, sendline, strlen(sendline)) < ){
cout<<"write error"<<endl;
exit();
} if ( (n = read(sockfd, recvline, MAXLINE)) < ){
cout<<"read error"<<endl;
exit();
} recvline[n] = ;
fputs(recvline, stdout); bzero(sendline, MAXLINE);
bzero(recvline, MAXLINE);
}
}

UDP的connect函数的更多相关文章

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

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

  2. UDP连接调用connect()函数

    UDP是一个无连接的协议,它没有像TCP中EOF之类的东西. 8.11 UDP的connect函数 除非套接字已连接,否则异步错误是不会反悔到UDP套接字的. 我们确实能够给UDP套接字调用conne ...

  3. connect函数的用法

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

  4. UDP的connect

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

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

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

  6. 【网络编程】——connect函数遇见EINTR的处理

    最近在公司项目中突然报错如下 “connect: Interrupted system call”, 经过查找代码发现是在创建 socket 中执行了 connect 函数失败导致.上网查阅资料发现这 ...

  7. connect函数详解

    不得不说,客户端的connect函数和服务端的accept函数是一对好基友,如果客户端没有去connect, 那么服务端的accept会一直在那里傻傻地痴痴地等待,我们先来看看connect函数的原型 ...

  8. QT QObject::connect函数的学习

      从Qobject(QObject.h)源码中可以看到QObject::connect的定义是这样的: static bool connect(const QObject *sender, cons ...

  9. connect函数

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

随机推荐

  1. OC-03类的声明和实现

    例子 //类名:Car//属性:轮胎个数.时速//行为:跑 #import<Foundation/Foundation.h >//完整的写一个函数:函数的声明和定义(实现)//完整的写一个 ...

  2. dev GridControl实现拖拽

    一.示例说明 以gridControl1和gridControl2为例,从gridControl1拖拽行到gridControl2中去. 二.属性设置 gridControl2.AllowDrop = ...

  3. Highcharts使用教程(1):制作简单图表

    今天我们要使用JavaScript图表Highcharts制作简单的柱形图,我们已经安装好Highcharts,让我们开始制作图表吧. 步骤一 在网页中添加一个div.设置id,设置图表长.高.代码如 ...

  4. 让我轻轻的告诉你AliSQLselect语句中in多少个合适

    在以往的分享中,不止一次被开发问: 在MySQL的官方手册上有这么一句话: the optimizer can estimate the row count for each range using ...

  5. grid style

    <style type="text/css"> .g_grid tr{ border-left:none; border-right:none; border-top: ...

  6. Python ---list,dict,str

    Python中定义常量 都用大写 Pip 安装python第三方模块的命令  一般默认都放在/python27/lib/site-pak List.count(‘元素’)-------------统计 ...

  7. activiti 中文文档

    http://www.mossle.com http://www.mossle.com/docs/activiti/index.html

  8. async和await

    总结下博客园中看到的async和await public static class TaskAsyncHelper { /// <summary> /// 将一个方法function异步运 ...

  9. 转载:AbstractQueuedSynchronizer的介绍和原理分析

    简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...

  10. ubuntu各种应用安装

    微信安装,编译包下载,双击electronic-wechat就能用了,记得lock在launcher上 https://github.com/geeeeeeeeek/electronic-wechat ...