上一页 1 2 3 4 5 6 7 8 ··· 11 下一页
  2012年1月7日
摘要: 我们的应用程序在调用了socket()函数,bind()函数之后,只是在本地创建了socket结构体,sock结构体,并把socket,sock这两个结构体跟I节点,文件句柄结合起来,在把socket创建时所指定的协议的操作集关联到sock结构体上,用于在socket指定了协议之后,使用这个操作集来完成相关的操作;之后的bind()函数则把本地的一个未被使用的端口号(一般大于1024,因为0~1024是知名端口号,保留下来做已知的特定用途,如端口号不是营养程序指定的,则查找空闲的端口号比较烦),用于表示当前sock所属的进程,并把本地的IP跟绑定到sock上,用于表示数据将从哪里被发送到网络上 阅读全文
posted @ 2012-01-07 09:56 image eye 阅读(787) 评论(0) 推荐(0) 编辑
  2012年1月5日
摘要: 正常的情况下,socket函数的调用,只要有足够的内存用于分配socket结构体,sock结构体,以及空闲的I节点和当前进程有空闲的文件表项,就会返回分配给当前进程分配此I节点的文件表项的序号,即文件句柄,通过这个文件句柄,可以找到对应的文件表项,通过文件表项可以找到对应的I节点,通过I节点可以找到socket套接字,通过套接字可以找到对以的sock结构体,而这个结构体就是我们数据的信使了,注意,只是信使哦。当应用程序调用socket创建完套接字后,一般情况下,接下来就会调用bind()函数来给这个socket绑定一个本地地址,即绑定一个IP地址,也即绑定一块网卡,即这个套接字的数据,就是从指 阅读全文
posted @ 2012-01-05 20:11 image eye 阅读(1398) 评论(0) 推荐(0) 编辑
摘要: sock结构体是我们在网络编程中遇到的第一个庞大的结构体struct sock { struct options *opt;/*IP选项缓存于此处*/ volatile unsigned long wmem_alloc;/*当前写缓冲区大小,该值不可大于系统规定的最大值*/ volatile unsigned long rmem_alloc;/*当前读缓冲区大小,该值不可大于系统规定最大值*/ unsigned long write_seq;/* write_seq 表示应用程序下一次写数据时所对应的第一个字节的序列号*/ unsigned long sent_seq;/* sent_seq 阅读全文
posted @ 2012-01-05 16:43 image eye 阅读(2918) 评论(0) 推荐(1) 编辑
摘要: 首先,这里会用到一个结构体,先把这个结构体整理出来struct socket {{short type;/*套接字所用的流类型,可取值SOCK_RAW,SOCK_DGRAM,SOCK_STREAM,SOCK_SEQPACKET,SOCK_PACKET,其中SOCK_STREAM 就是通常所说的TCP协议所用*/socket_state state;/*套接字状态,可取值SS_FREE ,SS_UNCONNECTED ,SS_CONNECTING ,SS_CONNECTED ,SS_DISCONNECTING */long flags;/*一些标志信息*/struct proto_ops *op 阅读全文
posted @ 2012-01-05 12:21 image eye 阅读(1708) 评论(0) 推荐(1) 编辑
摘要: client代码中,第一个被调用的函数是socket(),在这个函数被调用之前,系统做了什么事情,让socket()可以正常调用?首先,socket函数实际上是一个系统调用,它是内核中的代码,我们应用层通过系统调用,调用了系统的函数。其次,在系统启动时,已经调用sock_init()对socket进行了初始化,在我们调用socket函数之前,socket的初始化部分已经为我们的调用做好的铺垫了。void sock_init(void){ int i; ...... for (i = 0; i < NPROTO; ++i) pops[i] = NULL; proto_init(); ... 阅读全文
posted @ 2012-01-05 10:37 image eye 阅读(2645) 评论(0) 推荐(1) 编辑
摘要: 最近因工作需要写一个网卡驱动,晕倒,没有任何网络知识,就写网络驱动!可是,为了五斗米糊口,不得不从啊于是,打算从网络协议栈开始,把网络搞一搞。我们常常知道socket的用法(其实我还没有真正的写过socket代码,常常都是指那些socket高手了^-^),因此,打算从一个常用的实例开始,把网络协议栈整理一下,即把自己的学习经过进行记录,看看菜鸟的轨迹,是如何拐弯,颠簸。通常的socket编程分两部分吧(错了别怪我,我不是高手),一是client部分,二是server部分,而更通常的情况是我们都以写client的任务为多,因此,从简单下手,当然选择client端开始了。下面的代码,就是随便一个网 阅读全文
posted @ 2012-01-05 10:36 image eye 阅读(2079) 评论(0) 推荐(1) 编辑
摘要: [*] Power Management support//如果你想让你的Linux支持高级电源管理(也就是平常我们说的软关机、系统休眠等)需要选择它[ ] Power Management Debug Support//不想调试ACPI,不选[*] Suspend to RAM and standby//待机到内存,即内存供电而暂时关闭硬盘等外设[ ] Hibernation (aka 'suspend to disk')//休眠,即把内存内容保存在交换分区后关闭电脑,因为技术不是很成熟而且由于兼容性等问题,建议关闭此功能[*] ACPI (Advanced Configur 阅读全文
posted @ 2012-01-05 09:44 image eye 阅读(2730) 评论(0) 推荐(0) 编辑
摘要: 这个库仅在那些不包含在内核原码中的第三方内核模块才可能需要,可以全不选,内核中若有其他部分依赖它,会自动选上。CRC-CCITT functions ----->传送8-bit字符,欧洲标准CRC16 functions ----->传送8-bit字符,美国标准CRC32 functions----->用于点对点的同步数据传输,传输网路数据包所必须的CRC32c(castagnli,et al )Cyclic redundancy-check--->用于点对点的同步数据传输,比如iscsi设备 阅读全文
posted @ 2012-01-05 09:43 image eye 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 1.Kernel panic:VFS:unable to mount root fs on XXX解决方法:i.配置内核选项时确保文件系统选项配置正确,最好将ext2,ext3都编进内核ii.在block devices中将Initial RAM filesystem and RAM disk (initramfs/initrd) support选中如果启动计算机必须的模块并不是都编在了内核中,它将无法启动。2.Unable to find device_mapper major/minor可能的原因是内核不支持lvm 逻辑卷管理,而你的系统又使用的逻辑卷解决方法:在Multi-device 阅读全文
posted @ 2012-01-05 09:43 image eye 阅读(819) 评论(0) 推荐(0) 编辑
摘要: General setup 常规设置 Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动 Local version - append to kernel release 在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到 Automatically append version information to the version string 自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持 Support for 阅读全文
posted @ 2012-01-05 09:43 image eye 阅读(3081) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 11 下一页