学Linux网络编程这么久,还真没注意到 read/write 和 recv/send之间有什么区别,于是就去研究了一下。...flags); flags取值有: 0: 与write()无异 MSG_DONTROUTE:告诉内核,目标主机在本地网络,不用查路由表 MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式 MSG_OOB...int s, void *buf, size_t len, int flags); flags取值有: 0:常规操作,与read()相同 MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式 MSG_OOB...buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); flags取值有: 0:常规操作,与read()相同 MSG_OOB
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614056.html 一.多种I/O函数 前言:之前我们讲的数据传输一般Linux上用write...其实Linux上也可以用send和recv,它与write和read主要区别是它的最后一个参数可以附带一些扩展功能。...Linux中的send和recv 基础 ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags); 成功返回发送的字节数...可选项如下: MSG_OOB:传输紧急消息(Out-of-band data) MSG_PEEK:验证输入缓冲中是否存在接收的数据 MSG_DONTROUTE:在本地网络中寻找目的地...= 2) { printf("Usage: %s \n", argv[0]); exit(1); } //Linux上的信号处理(事件驱动
MSG_OOB This flag requests receipt of out-of-band data that would not be received in the normal...MSG_TRUNC (since Linux 2.2) For raw (AF_PACKET), Internet datagram (since Linux 2.4.27/2.6.8),...netlink (since Linux 2.6.22) and UNIX datagram (since Linux 3.4) sockets: return the real length...MSG_OOB is returned to indicate that expedited or out-of-band data were received....POSIX.1-2001 describes only the MSG_OOB, MSG_PEEK, and MSG_WAITALL flags.
发送 OOB 首先产生 OOB 是非常简单的,只需要在寻常 send 的最后一个参数,加入 MSG_OOB 标志位: ret = send (sockfd, ptr, n, MSG_OOB); 如果考虑一个完整的测试场景...normal head %d\n", ret); 7 8 ptr += 2; 9 n = 1; 10 if ((ret = send (sockfd, ptr, n, MSG_OOB...4 int ret = 0; 5 char buf[BUFLEN] = { 0 }; 6 ret = recv (g_fd, buf, sizeof (buf), MSG_OOB...,MSG_OOB) 接收带外数据 1 if (FD_ISSET(clfd, &exds)) 2 { 3 // the...\n"); 8 ret = recv (clfd, buf, 1, MSG_OOB); 9 if (ret > 0
(这里是windows中的头文件,Linux的用法在下面的那个实例) 头文件:#include #include int recvfrom...其他数值定义如下: 1、MSG_OOB 接收以out-of-band 送出的数据. 2、MSG_PEEK 返回来的数据并不会在系统内删除, 如果再调用recv()会返回相同的数据内容.
或者是紧急数据或者还没有发出去一个数据包则直接发送 if ((skb->len - hdrlen) >= sk->mss || (flags & MSG_OOB...return(copied); return(tmp); } // 带外数据 if (flags & MSG_OOB...tcp_read: if (flags & MSG_OOB) return tcp_read_urg(sk, nonblock, to, len, flags); tcp_read_urg...release_sock(sk); return 1; } release_sock(sk); /* * Fixed the recv(..., MSG_OOB
Linux系统调用– recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息。对于recvfrom,可同时应用于面向连接的和无连接的套接字。...MSG_OOB:指示接收到out-of-band数据(即需要优先处理的数据)。 MSG_ERRQUEUE:指示除了来自套接字错误队列的错误外,没有接收到其它数据。
MSG_OOB 发送带外数据(仅适用于SO_STREAM;参见2.2.3节)。...MSG_OOB 处理带外数据(参见2.2.3节具体讨论)。...MSG_OOB 处理带外数据(参见2.2.3节具体讨论)。...MSG_OOB 处理带外数据(参见2.2.3节具体讨论)。...WSAEOPNOTSUPP:指定了MSG_OOB,但套接口不是SOCK_STREAM类型的。 WSAESHUTDOWN:套接口已被关闭。
MSG_OOB 处理超出边界的数据 MSG_PEEK 从接受队列的起始位置接收数据,但不将他们从接受队列中移除。..., $msg, strlen( $msg ) ); socket_close( $connection_socket ); } socket_close( $listen_socket ); 那么MSG_OOB...MSG_OOB其实叫做外带数据,有时候有些地方叫做紧急数据。...PHP的socket_recv()选项有如下四个项,且每项之间均可以使用|(或运算)来搭配使用同时获得多个特性: MSG_OOB MSG_PEEK MSG_WAITALL MSG_DONTWAIT 而...recv()则拥有五个配置项: MSG_OOB MSG_PEEK MSG_WAITALL MSG_DONTWAIT MSG_DONTROUTE 而当你使用recvmsg()的时候,配置项则达到了十一项
flags参数比较重要的有两个,一个是MSG_OOB,即读取带外数据时候的选项,tcp头部有一个紧急指针16位的值。...参考: 《Linux C 编程一站式学习》 《TCP/IP详解 卷一》 《UNP》
flag参数 send(int socket, const void *buffer, size_t length, int flags); flags参数传MSG_OOB...MSG_OOB是个宏 • 确认ACK:占1bit,当ACK=1时生效。TCP有条硬性规定,当建立链接成功后所有传输的数据报文都必须把ACK置为1。
这里需要注意的是,listen()函数不会阻塞,它主要做的事情为,将该套接字和套接字对应的连接队列长度告诉 Linux 内核,然后,listen()函数就结束。...其值为 MSG_CONFIRM MSG_DONTROUTE MSG_DONTWAIT MSG_EOR MSG_MORE MSG_NOSIGNAL MSG_OOB 中 1 个或者几个的逻辑或或者逻辑与值...其值为 MSG_CMSG_CLOEXEC MSG_DONTWAIT MSG_ERRQUEUE MSG_OOB MSG_PEEK MSG_TRUNC MSG_WAITALL 中 1 个或者几个的逻辑或或者逻辑与值
IO复用是Linux中的IO模型之中的一个,IO复用就是进程预先告诉内核须要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理。从而不会在单个IO上堵塞了。...Linux中。提供了select、poll、epoll三种接口函数来实现IO复用。...採用带MSG_OOB标志的recv函数都去带外数据 */ if(FD_ISSET(connfd, &except_fd)) { if(recv(connfd, buf, sizeof(buf...) - 1, MSG_OOB) < 0) { err_info("recv error\n"); continue; } printf("recv: %s\n", buf...} } } } } close(connfd); close(listenfd); return 0; } 3、epoll系列函数 epoll是Linux
第三个参数为该字符串的大小 第四个参数可以用来控制读写操作 该值可以为一下几种 0 MSG_DONTROUTE:不查找路由表/* send without using routing tables */ MSG_OOB...MSG_OOB:表示能够接收和发送带外的数据.关于带外数据我们以后会解释的. MSG_PEEK:是recv函数的使用标志,表示只是从系统缓冲区中读取内容,而不清除系统缓冲区的内容。
Linux 文件系统 目录 说明 bin 存放二进制可执行文件 sbin 存放二进制可执行文件,只有 root 才能访问 boot 存放用于系统引导时使用的各种文件 dev 用于存放设备文件 etc...是超级管理员 localhost 表示主机名 ~ 表示当前目录(家目录),其中超级管理员家目录为 /root,普通用户家目录为 /home/chan $ 表示普通用户提示符,# 表示超级管理员提示符 Linux...test.tar.gz 文件搜索命令 locate:在后台数据库搜索文件 updatedb:更新后台数据库 whereis:搜索系统命令所在位置 which:搜索命令所在路径及别名 find:搜索文件或文件夹 用户和组 Linux
Linux文件操作 Linux中,一切皆文件(网络设备除外)。 硬件设备也“是”文件,通过文件来使用设备。 目录(文件夹)也是一种文件。...boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件和镜像文件。...deb:deb是Device(设备)的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。...系统会自动识别一些设备,例如U盘、光驱等,当识别后,Linux会把识别的设备挂载到这个目录下。...---- Linux文件的操作方式 文件描述符fd fd是一个大于等于0的整数。 每打开一个文件,就创建一个文件描述符,通过文件描述符来操作文件。
printf( "get %d bytes of normal data: %s\n", ret, buf ); } /* 对于异常事件,采用带MSG_OOB...connfd, &exception_fds ) ) { ret = recv( connfd, buf, sizeof( buf )-1, MSG_OOB...---- 参考资料: 《Linux高性能服务器编程》
---- O_SYNC 缓存同步 为了保证磁盘系统与缓冲区内容一致,Linux系统提供了sync,fsync,fdatasync三个函数。...---- Linux文件IO流程图 内核中会有一个线程,不断地将高速页缓冲区中的数据写入到物理磁盘中。
相信很多在linux平台工作的童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活的将几种不同的命令协同起来完成一件任务.就好像下面的命令: echo 123 | awk '{print $0+123...EAGAIN 如果所有管道写端对应的文件描述符被关闭,则read返回0 如果所有管道读端对应的文件描述符被关闭,则write操作会产生信号SIGPIPE 当要写入的数据量不大于PIPE_BUF时,linux...当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。
Linux ESC :wq 和:wq!的区别 Linux ESC:wq 和:wq!...的区别 发布者:IT人在线 | 发表时间:2018-12-4 17:20:43 Linux ESC :wq esc(键退出)->:(符号输入)->wq(保存退出) wq(存盘并退出 write%quite
领取专属 10元无门槛券
手把手带您无忧上云