TCP/UDP的一些收发接口的特殊用法

1.UDP使用connect函数和不使用connect函数的区别

* 不能再使用sendto/recvfrom,而只能使用write/read或send/recv,也就是说不能在收发数据时才指定目的IP

* 已连接的UDP引发的异步错误会返回给所在的进程,而未连接的UDP不会接收异步错误

* 已连接的UDP具有较高的收发效率。因为未连接的UDP在收发数据时,需要先执行连接过程,数据收发完成后,再解除连接

* UDP可以多次调用connect,目的:指定新的IP地址和端口或者也可以是断开连接

2.关于recvfrom/sendto,read/write,recv/send,accept,connect等所有阻塞端口的超时控制的3种方法

* select 超时退出select.io不仅可以使用select来驱动,还可以使用信号SIGIO来驱动(异步io),当io上发生任何事件时,将会发出该信号

* alarm  超时将接收到SIGALRM信号,同时当前的阻塞端口返回errno==EINTR错误

* setsockopt 设置socket选项:SO_RCVTIMEO/SO_SNDTIMEO

非阻塞的设置:

int val=fcntl(fd,F_GETFL,0);

fcntl(fd,F_SETFL,val|O_NONBLOCK);

3.关于recvfrom/sendto,read/write,recv/send读写接口的参数flags标志

* 0  没有任何特殊意义

* MSG_DONTROUTE  收发数据时,无需执行路由查找,告知路由就在局域网之内

* MSG_DONTWAIT   仅本次执行非阻塞收发操作

* MSG_OOB        指明收发带外数据,TCP连接上只有一个字节可以作为带外数据发送

* MSG_PEEK       只对收数据有用,查看缓存中已经可读的数据的多少

* MSG_WAITALL    只对收数据有用,读取到指定数目的数据才返回000

4.聚合与分散 readv/writev函数:可以对任何文件描述符进行操作

#include <sys/uio.h>

size_t readv(int fd,const struct iovec *iov,int iovcnt);

size_t writev(int fd,const struct iovec *iov,int iovcnt);  //若成功则返回读入和写出的字节数,失败返回-1

struct iovec{

void *iov_base; //starting address of buffer

size_t iov_len; //sizeof of buffer

}

时间: 2025-01-01 08:49:43

TCP/UDP的一些收发接口的特殊用法的相关文章

HP-SOCKET TCP/UDP通信框架库解析

项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功能,供上层应用直接简单使用的接口实现:而对于数据包完整性和协议解析等未处理, 也就意味着需要应用层自己处理一些数据包构造或解析等操作: 事实上目前只能支持windows平台: 1. 对于TCP通信模式下:服务器端和Agent均采用的是异步IO模型中的完成端口模型,客户端采用的是就绪IO通告模型中的W

Photon服务器引擎(二)socket/TCP/UDP基础及Unity聊天室的实现

Photon服务器引擎(二)socket/TCP/UDP基础及Unity聊天室的实现 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API). 通过Socket,我们才能使用TCP/IP协议.实际上,Socket跟TCP/IP协议没有必然的联系.Socket编程接口在设计的时候,就希望也能适应其他的网络协议.所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,

高性能 TCP &amp; UDP 通信框架 HP-Socket v3.2.2 正式发布

HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中. 为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握

Socket(套接字) IP TCP UDP HTTP

Socket(套接字) (转)什么是套接字(Socket)? 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)(socket是操作系统提供出来的接口)的接口,区分不同应用程序进程间的网络通信和连接.生成套接字,主要有3个参数:通信的目的IP地址.使用的传输 层

HTTP TCP UDP Socket 关系的几个经典图

  从上图可以看到,TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. 在应用层有FTP.HTTP.TELNET.SMTP.DNS等协议. 下图也是描述这个关系的. 参考: https://krystalchisholm.wordpress.com/2010/11/24/chapter-17/    另外我们经常说到的 Socket 的所在位置如下图:   Socke

高性能 TCP &amp; UDP 通信框架 HP-Socket v3.3.1 正式发布

HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中. 为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握

TCP/UDP编程中的问题汇总

TCP/UDP编程中的问题汇总 TCP和UDP发送大文件的问题. 答: 发送端: 发送时,先发送文件的名称及大小等信息. 然后,设置一个缓冲区的大小,假设为4K. 再循环读4K的文件内容,并发送,直到发送完成. 最后,再发送完成标记. 接收端: 接收到第一个包时,得到文件的大小等信息. 计算出要接收多少个包. 然后,循环接收包,并将接收到的数据写入到文件中. 直到,接收到的数据长度等于文件的大小. struct package { 文件标识 //GUID 偏移量 //001- 数据段 //Byt

高性能 TCP &amp; UDP 通信框架 HP-Socket v3.3.1 RC2 发布

HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中. 为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握

以太网,IP,TCP,UDP数据包分析

http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html 1.ISO开放系统有以下几层: 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 2.TCP/IP 网络协议栈分为应用层(Application).传输层(Transport).网络层(Network)和链路层(Link)四层. 通信过程中,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如