
Network program
七绝乌梭
这个作者很懒,什么都没留下…
展开
-
简单进程池实现多TCP客户服务
根据预定义进程数创建进程池。父子进程通信使用的IPC方式为:UNIX域套接字父进程listen,aeecpt,并将连接套接字发送到子进程,交由子进程处理该连接。子进程处理完毕,与父进程通信,实现资源回收,并在下一连接到来交由该完毕的子进程。#include "unp.h"#include #define IDLE 0#define BUSY 1#define END原创 2012-03-28 09:31:40 · 1399 阅读 · 0 评论 -
链路层访问修改
首先例子中, udpcksum.h包含了两个头文件 ip_var.h/udp_var.h,我是centos5.5的,系统中并无这些头文件。如果自己隐掉,编译时明显就会报struct udpiphdr结构不存在。可在udpcksum.h中增加以下代码:struct ipvolg{ u_char ih_x1 [9]; //9 bit u_char ih_pr;转载 2012-03-22 20:50:41 · 594 阅读 · 0 评论 -
基于线程池实现linux下守护进程运行web目录服务器
LInux先建立线程池,主函数监听套机字,accept后,将连接套接字投入线程池处理。自己搞的这个线程池,暂时没有发现问题,运行效果还行。虽然free是线程安全,不可重入的。但是我们并没使用静态变量,所以不会存在问题下为main函数,运行参数为 ./web n k ;n为想线程池初始化的线程数,k为0为终端运行,k为1则转为守护进程。运行如图支持文原创 2012-04-05 08:21:47 · 1107 阅读 · 0 评论 -
源路径选项
1. V4,V6头部差异IP源路径选项:对于IPV4,由于IP头部长度字段为4位,最大可以表示15,那么限制了IPV4的头部总长度为15*4 = 60字节。前10字节为固定的头部部分,所以最多有40个字节用来填充选项字段。对于IPV6,固定长度的40字节的IPV6头部和传输层头部之间可以有扩展头部。2. V4,6头部选项字段填充和获取使用setsockopt和getsockopt,传入参数原创 2012-03-19 19:39:20 · 1144 阅读 · 0 评论 -
双向链表实现线程池 用于TCP并发连接
简述:自我感觉对C指针了解的还是比较透彻,能够运用自如,一方面练习一下多线程编程,另一方面练习一下数据结构链表。但是完成的过程中,各种问题还是扑面而来,共花了2个小时完成了此线程池来实现TCP并发连接,创建固定数目的线程时间仓促,可能有某些指针未释放,或者还没完善的地方,希望能共同讨论。双向链表提高扫描速度,信号等待用while保护,防止惊群,在任务提取和加入过程动态维护链表,防止链表原创 2012-03-28 19:16:44 · 1600 阅读 · 0 评论 -
原始套接口基础知识
原始套接口输出: 1如果已经连接,则可以使用write,writev,send 2.未连接,则使用sendto,sendmsg 3.开启IP_HDRINCL:进程需要自填充IP,进程调用输出函数时的字节数包括IP头部。 IPV4的标识字段可以设置成0,由内核填充该值; IPV4的头部校验和字原创 2012-03-19 14:30:40 · 655 阅读 · 0 评论 -
异步信号驱动IO实现回射服务器
#include "unp.h"#include /*server */#define QSIZE 10struct DG{ void *data; size_t datalen; struct sockaddr_in addr; socklen_t addrlen;};struct DG client[QSIZE]; /*循环队列*/int nqueue, nin,原创 2012-03-16 18:51:38 · 452 阅读 · 0 评论 -
学习笔记:对Tcp拥塞,超时重传的一些理解
仅供个人笔记,不能保证正确#include "unp.h"extern int c_window, allow_window;extern int RTO;extern int *point1, *point2, *point3;extern int record_conges;void mult_dec( ) { /*乘法减小*/ int *tmp原创 2012-04-01 09:52:48 · 394 阅读 · 0 评论 -
糊涂窗口综合症
什么是糊涂窗口综合症当发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,或二者兼而有之;就会使应用进程间传送的报文段很小,特别是有效载荷很小。 极端情况下,有效载荷可能只有1个字节;而传输开销有40字节(20字节的IP头+20字节的TCP头) 这种现象就叫糊涂窗口综合症发送端引起的糊涂窗口综合症如果发送端为产生数据很慢的应用程序服务(典型的有telnet应翻译 2012-04-01 10:28:17 · 369 阅读 · 0 评论 -
利用Unix域套接字实现IPC
写完后,至少调试了30分钟时间。错误1:snprintf(argsockfd, sizeof(argsockfd), "%d", sockfd[1]);snprintf(argmode, sizeof(argmode), "%d", mode);写作:snprintf(argsockfd, sizeof(argsockfd), "%s", sockfd[1]);snprintf(arg原创 2012-03-14 21:39:16 · 623 阅读 · 0 评论 -
校验和总结
1:IP校验和只校验20字节的IP报头,并不会计算数据部分的校验和。因为IP也是不可靠,尽最大努力投递。2:ICMP校验和覆盖整个报文(ICMP报头+ICMP数据);3:UDP和TCP校验和不仅覆盖整个报文(头部+数据),而且还有12字节的IP伪首部,其中包括源IP地址(4字节)、目的IP地址(4字节)、协议(2字节,第一字节补0)和TCP/UDP包长(2字节)。另外UDP、TCP数据报的原创 2012-03-31 09:08:36 · 625 阅读 · 0 评论 -
简易ping程序
当我把icmp的检验和设置成0时,ping百度是可以有echo返回。但是ping其他主机是没有返回响应。手动添加检验和后正常。原因:可能是baidu服务器并没有检测校验和就返回一个echo,这样可以减少服务器的负担。而其他一些站点都会校验。注意点:IPV4的icmp,在原始套接字收到后,收到的是包含IP头在内的完整数据报IPV6的icmp,则是去除所有ip头和扩展头部的原创 2012-03-31 08:40:23 · 527 阅读 · 0 评论 -
UDP 超时重传机制
问题来源:老式方法:UDP传输设定超时未N秒,发送一个请求后等待N秒钟,若超时都没有收到确认,则重发请求,重发一定次数后便丢弃。老式方法不合理的原因:由于网络上影响因素的不同,可能RTT差别较大,设定一个固定的超时时间使资源不能得到合理应用。较好的方法:根据实测的RTT及其他因素考虑在内来估计超时时间。术语RTO:重传超时Srtt:平滑化的RTT估算因子Reevar:平滑化平均偏差估原创 2012-03-14 14:43:13 · 13202 阅读 · 1 评论 -
对于非阻塞connect的一点认识
一般如下:connect();select();由于是非阻塞,很自然connect立即返回,而不同于阻塞条件下的成功或者失败才返回。对于TCP来说,非阻塞的connect会立即返回一个错误EINPROGRESS,而且完成3路握手。对于UDP来说,个人觉得,由于内核只是检查是否存在立即可知的错误,并记录对方的IP和端口号,没必要使用非阻塞的connect。正常情况:原创 2012-03-13 21:20:51 · 644 阅读 · 0 评论 -
fedora9下使用QT连接数据库(QSqlDatabase: QODBC driver not loaded)
开源版的QT没有提供Mysql的驱动,导致使用数据库的时候提示如下错误:QSqlDatabase: QODBC driver not loadedQSqlDatabase: available drivers: QSQLITE解决方法:重新编译QT ./configure -qt-sql-mysql -qt-sql-sqlite -plugin-sql-mysql -plugi原创 2012-05-02 20:51:40 · 1479 阅读 · 1 评论