码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-11-10 22:06:19      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:ip地址   接口   write   

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

}

本文出自 “tech记录” 博客,谢绝转载!

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

标签:ip地址   接口   write   

原文地址:http://a1liujin.blog.51cto.com/5519498/1871461

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!