sendmsg/recvmsg和struct msghdr】的更多相关文章

函数原型 #include <sys/types.h> #include <sys/socket.h> ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags); ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); 两函数都用到struct msghdr: struct msghdr { void *msg_name; /* optional…
在前面我们介绍了UNIX域套接字编程,更重要的一点是UNIX域套接字可以在同一台主机上各进程之间传递文件描述符. 下面先来看两个函数: #include <sys/types.h> #include <sys/socket.h> ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags); ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); 它们…
在前面我们介绍了UNIX域套接字编程,更重要的一点是UNIX域套接字可以在同一台主机上各进程之间传递文件描述符. 下面先来看两个函数: #include <sys/types.h>  #include <sys/socket.h> ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags); ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); 它…
理解struct msghdr当我第一次看到他时,他看上去似乎是一个需要创建的巨大的结构.但是不要怕.其结构定义如下:struct msghdr {    void         *msg_name;    socklen_t    msg_namelen;    struct iovec *msg_iov;    size_t       msg_iovlen;    void         *msg_control;    size_t       msg_controllen;   …
函数原型 read/write系原型 #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); #include <sys/uio.h> ssize_t readv(int fd, const struct iovec *iov, int iovcn…
内核中用于数据接收的结构体struct msghdr(转) 我们从一个实际的数据包发送的例子入手,来看看其发送的具体流程,以及过程中涉及到的相关数据结构.在我们的虚拟机上发送icmp回显请求包,ping另一台主机172.16.48.1.我们使用系统调用sendto发送这个icmp包. ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);…
这两个函数是最通用的I/O函数.实际上我们可以把所有read.readv.recv和recvfrom调用替换成recvmsg调用.类似地,各种输出函数调用也可以替换成sendmsg调用. #include <sys/socket.h> ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); ssize_t sendmsg(int sockfd, struct msghdr *msg, int flags); 返回:读入或写出字节数…
每一个TCP套接口有一个发送缓冲区,可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小. 应用进程调用 write时,内核从应用进程的缓冲区中拷贝所有数据到套接口的发送缓冲区.如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用进程的缓冲区大于 套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠).这里假设套接口是阻塞的,这是通常的缺省设置.内核将不从write 系统调用返回,直到应用进程缓冲区中的所有数据都拷贝到套接口发送缓冲区.因此从写一个TCP套接口的w…
catalog . Netlink简介 . Netlink Function API Howto . Generic Netlink HOWTO kernel API . RFC Linux Netlink as an IP Services Protocol . sendmsg.recvmsg In User Space . kernel_recvmsg.kernel_sendmsg In Kernel Space . NetLink Sockets C++ Library . Netlink…
参考链接:http://www.cnblogs.com/riky/archive/2006/11/24/570713.aspx 1.getsockname和getpeername getsockname函数获取与套接口关联的本地协议地址. getpeername函数获取与套接口关联的远程协议地址. ---------------------------------------------------------------------- #include <sys/socket.h> int …
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一        个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序. 服务端        和客户端相…
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一        个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序. 服务端        和客户端相…
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一        个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序. 服务端        和客户端相…
1:linux网络API分为:socker地址API,socker基础API,网络信息API 1,socker地址API:包含IP地址和端口(ip, port).表示TCP通信的一端. 2,socker基础API:创建/命名/监听socker,接收/发起链接,读写数据,获取地址信息,检测带外标记和读取/设置socker选项.sys/socket.h 3,网络信息API:主机名和IP地址的转换,服务名和端口号的转换.netdb.h 2:socket和API的函数 和 相关知识. 1,函数. IP地…
htons.ntohs.htonl和ntohl函数 Linux提供了4个函数来完毕主机字节序和网络字节序之间的转换 #include <netinet/in.h> uint16_t htons(uint16_t host16bitvalue); uint32_t htonl(uint32_t host32bitvalue); uint16_t ntohs(uint16_t net16bitvalue); uint32_t ntohl(uint32_t net32bitvalue); inet_…
原地址:http://www.cnblogs.com/duzouzhe/archive/2009/06/19/1506699.html (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一        个地方获取文件的…
  问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字(socket地址)API,socket基础API,和网络信息API. 套接字API 套接字socket:(ip, port),即IP地址和端口对,唯一地表示了使用该TCP通信的一端. 需要了解:主机字节序和网络字节序. 原因:考虑32位的机器,CPU的累加器一次装载4字节的内容.那么这4字节在内存中…
题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈内核相关技术 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linux内核协议栈中对于socket相关API的实现 首先对于内核中断向量表不是很熟悉的请先参考一下博文:<TCP/IP协议栈源码图解分析系列6:linux 系统调用中断向量表> URL:http://blog.csdn.net/byhankswang/article/details/9284023 首…
写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道,希望自己能慢慢的了解一下它的这个MtProtoKit开源协议,即时通讯这一块的东西我以前写过一篇<iOS 即时通讯 + 仿微信聊天框架 + 源码>,从点击量看的出来真的这一块的东西我们的需求量还是很大,<iOS 即时通讯 + 仿微信聊天框架 + 源码>这篇文章由于自己去年也是能力有限…
问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字(socket地址)API,socket基础API,和网络信息API. 套接字API 套接字socket:(ip, port),即IP地址和端口对,唯一地表示了使用该TCP通信的一端. 需要了解:主机字节序和网络字节序. 原因:考虑32位的机器,CPU的累加器一次装载4字节的内容.那么这4字节在内存中的顺…
5.1   socket地址API 大端字节序(网络序):高位在低址,低位在高址 小端字节序(主机序):低位在低址,高位在高址 判断,利用联合的特性: #include <iostream> using namespace std; int main() { union { int value; char union_bytes[ sizeof(int) ]; } test; test.value = 0x01020304; ;i < ;i++) cout<<test.uni…
)Linux程序设计入门--网络编程 Linux系统的一个主要特点是他的网络功能非常强大.随着网络的日益普及,基于网络的 应用也将越来越多. 在这个网络时代,掌握了Linux的网络编程技术,将令每一个人处 于不败之地,学习Linux的网络编程,可以让我们真正的体会到网络的魅力. 想成为一 位真正的hacker,必须掌握网络编程技术. 现在书店里面已经有了许多关于Linux网络编程方面的书籍,网络上也有了许多关于 网络编程方面的教材,大家都可以 去看一看的.在这里我会和大家一起来领会Linux网…
写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道,希望自己能慢慢的了解一下它的这个MtProtoKit开源协议,即时通讯这一块的东西我以前写过一篇<iOS 即时通讯 + 仿微信聊天框架 + 源码>,从点击量看的出来真的这一块的东西我们的需求量还是很大,<iOS 即时通讯 + 仿微信聊天框架 + 源码>这篇文章由于自己去年也是能力有限…
一.IPv4与IPv6的互操作性 1.IPv4客户与IPv6服务器 拥有双重协议栈的主机的一个基本特性就是:其上运行的IPv6服务器既能应付IPv4客户,又能应付IPv6客户.这是通过使用IPv4映射的IPv6地址实现的. 要求,ipv6服务器必须具有双重协议栈,即服务器必须同时拥有ipv4地址和ipv6地址,称其为ipv6服务器是因为开放的网络套接口为ipv6类型. 当ipv4客户欲连接ipv6服务器时,通过gethostbyname获得服务器主机的A记录(即ipv4地址),并通过网络发送ip…
我的网络编程笔记, 因为最近又要做Linux下的网络编程,故重新修订, 其中一些内容参考了文末的链接及文章 1.   基本概念 2.   基本接口 2.1.   打开一个socket 2.2.   将socket绑定定指定的端口—bind 2.3.   侦听socket—listen (服务器端) 2.4.   等待接收请求—accept (服务器端) 2.5.   连接到socket—connect 2.6.   利用socket传输数据 2.6.1.    read和write 2.6.2.…
1.1 客户端程序和服务端程序 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 网络程序是先有服务器程序启动,等待客户端的程序运行并建立连接.一般的来说是服务端的程序 在一个端口上监听,直到有一个客户端的程序发来了请求. 1.2 常用的命令 由于网络程序是有两个部分组成,所以在调试的时候比较麻烦,为此我们有必要知道一些常用的网络命令 netstat命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项 我们常用的选…
第5章 Linux网络编程基础API 探讨Linux网络编程基础API与内核中TCP/IP协议族之间的关系,并未后续章节提供编程基础.从3个方面讨论Linux网络API. socket地址API.socket 最开始的含义是一个IP地址和端口对(ip, port).它唯一地表示了使用TCP通信的一端.本书称其为socket地址. socket基础API.socket的主要API都定义在 sys/socket.h 头文件中,包括创建socket.命名socket.监听socket.接受连接.发起连…
1. Netlink简介 0x1:基本概念 Netlink是一个灵活,高效的”内核-用户态“.”内核-内核“.”用户态-用户态“通信机制.通过将复杂的消息拷贝和消息通知机制封装在统一的socket api接口中,netlink提供了良好的接口界面. Netlink是一个接口家族的合集总称,它包括下列接口类型, 路由daemon(NETLINK_ROUTE) 1-wire子系统(NETLINK_W1) 用户态socket协议(NETLINK_USERSOCK) 防火墙(NETLINK_FIREWA…
首先为一个I/O函数设置超时,这有三种方法.然后是三个read和write函数的变体: recv和send,他们可以把含有标志的第四个参数从进程传给内核: readv和writev这两个函数可以指定一个缓冲区的向量以输入或输出数据: recvmsg和sendmsg在其他I/O函数的所有功能基础上结合了新的接收和发送辅助数据的能力. 一.套接口超时 有三种方法给套接口上的I/O操作设置超时. 调用alarm,在到达指定事件时产生SIGALRM信号.这涉及到信号处理,这一点随不同实现而变化,而且可能…
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一        个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序. 服务端        和客户端相…