linux socket
文章平均质量分 62
zhouqingxing
这个作者很懒,什么都没留下…
展开
-
address的网络字节的转换接口
对于ipv4来说,以下三个接口是常用的。http://blog.csdn.net/zhangboyj/article/details/6157263inet_addr() 简述:将一个点间隔地址转换成一个in_addr。 #include unsigned long PASCAL FAR inet_addr( const struct FAR* cp转载 2013-10-29 14:10:12 · 807 阅读 · 0 评论 -
select 方法
原型int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,const struct timeval* timeout);nfds:本参数忽略,仅起到兼容作用。 readfds:(可选)指针,指向一组等待可读性检查的套接口。 writefds:(可选)指针,指向一组转载 2015-01-23 10:58:57 · 1337 阅读 · 0 评论 -
ipv6 ipv4的socket编码的区别
大家都知道,随着互联网上主机数量的增多,现有的32位IP地址已经不够用了,所以推出了下一代IP地址IPv6,写网络程序的要稍微改变一下现有的网络程序适应IPv6网络是相当容易的事。对于我们来说就是IP地址变化了,所以程序里在用到IP地址的地方做相应的改变就可以了。记住:主要是改变程序里设置IP地址和端口等部分的代码。服务器端源代码如下:/******************转载 2014-05-22 14:08:24 · 1621 阅读 · 0 评论 -
ipv6 编码
IPv6程序相对于IPv4改动并不大。其中主要的改动就是地址结构与地址解析函数。在RFC中详细说明了socket api 为适应IPv6所做的改动。而且windows平台与Linux平台在实现上也几乎是一样的。只不过头文件与支持程度等有所不同罢了(具体请参见RFC 2553与RFC 2292)。如读者有兴趣的话可以找RFC来看看,在这里就不再详细说明,只讲最简单的原理与例子,同时例出各主要so转载 2014-05-22 14:05:56 · 1305 阅读 · 0 评论 -
ipv6 ipv4的不同
目前运行主流的IT系统中,用于解决分布式系统内部模块及不同的系统间通信的一种主要的解决方案就是使用套接字Socket来开发应用。由于当前大部分正在运行的IT系统中使用套接字Socket开发环境基本上都是基于IPv4完成的,因此在IT系统由IPv4向IPv6演进方案中如何完成这部分相关应用的演进就显得尤为的关键,下面本文将从技术角度分别从编程API接口的差异性、为实现IPv6重构软件的关键技术及如何转载 2014-05-20 13:44:42 · 2791 阅读 · 0 评论 -
tcp recv 和 udp recvfrom 接收的包个数
对于tcp 的recv来说,当应用层调用该接口时,socket层会给它的buffer里填充多少数据是不确定的,有可能是一个包,或者1.5个包,或者3个包,也有可能是几个字节,也有可能是几k数据,上层只能根据自己用的应用协议来解返回的数据。对于udp的recvfrom来说,当应用层调用该接口时,socket层会给它的buffer里只填充一个数据包,所以比较好解析。原创 2014-03-31 15:22:38 · 2012 阅读 · 0 评论 -
select poll epoll 对比
linux提供了select、poll、epoll接口来实现IO复用,三者的原型如下所示,本文从参数、实现、性能等方面对三者进行对比。 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);int poll(struct po转载 2014-03-19 16:46:08 · 402 阅读 · 0 评论 -
Socket INADDR_ANY INADDR_LOOPBACK 127.0.0.1
linux下的socket INADDR_ANY表示的是一个服务器上所有的网卡(服务器可能不止一个网卡)多个本地ip地址都进行绑定端口号,进行侦听。不光是多个网卡的问题.见如下server listen:80 0.0.0.0 //INADDR_ANY,外部的client ask 从哪个server的地址近来都可以连接到80端口转载 2014-02-13 16:37:37 · 2698 阅读 · 0 评论 -
rece buffer
从tcp数据传输的角度来说,传输速度取决于接收窗口和数据包在链路上的往返时间对于tcp建立连接时的sys包里的接收窗口主要根据系统配置里的的tcpbuffer参数(ReadMin, ReadInitial, ReadMax),配合算法得出的。在接收过程中,这个接收窗口会根据算法发送改变,比如当接收端收到数据时,它把 ACK 发送回发送端以表明成功接收到这些字节。在每个 ACK 中,“窗口”原创 2014-01-27 15:43:38 · 1269 阅读 · 0 评论 -
tcp与udp数据包的大小
MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。由于以太网EthernetII最大的数据帧是15转载 2013-12-16 15:56:19 · 647 阅读 · 0 评论 -
UDP数据包的大小
UDP数据包大小问题 转帖自: http://blog.csdn.net/buptzwp/archive/2009/12/22/5055487.aspx 在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好?当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的发送聊天消息的情况作分析,对于其他情况,或许也能转载 2013-12-16 15:55:08 · 746 阅读 · 0 评论 -
select
一、winsock中#include 原型int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,const struct timeval* timeout);nfds:本参数忽略,仅起到兼容作用。 readfds:(可选)指针,指向一组等待可读性检查的套接口。转载 2013-12-05 10:27:47 · 707 阅读 · 0 评论 -
socket 非阻塞的几种方式
Connet write 在非阻塞时select是否可写Accept read在非阻塞时, select是否可读Listen close没有所谓的阻塞状态 对于非阻塞的UDP的read,如果没有数据则返回-1,error为 EWOULDBLOCK对于非阻塞的tcp的read,如果没有数据则返回-1,error为 EWOULDBLOCK原创 2013-12-05 10:42:00 · 639 阅读 · 0 评论 -
socket bind
在最开始接触bind的时候,只是在写基于tcp的server端的时候,知道在listen之前需要先bind一下,用来确保socket能在某个固定的端口监听。而bind的时候,函数参数中的端口填自己将要绑定的端口就行;而IP地址,需要填本机的IP,但是也可以用一个宏INADDR_ANY代替,用这个宏就可以不用查找本机的IP,它就可以代替本机的IP。当时只觉得这个INADDR_ANY比较神奇,但是由于原创 2013-10-30 14:02:12 · 719 阅读 · 0 评论 -
socket accept
今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口? 讨论完后,才发现,自己虽然熟悉socket的编程套路,但是却并不是那么清楚socket的原理,今天就趁这个机会,把有关socket编程的几个疑问给搞清楚吧。 先给出一个典型的TCP/IP通信示意图。转载 2015-06-24 11:38:26 · 880 阅读 · 0 评论