
unix c / socket
xiangjie256
这个作者很懒,什么都没留下…
展开
-
滑动窗口与拥塞控制
滑动窗口:用作流量控制:1.发送端和接收端各维护一个独立的发送缓冲区和接收缓冲区2.窗口是一段允许被发送的字节序列3.接收端会根据接收端缓冲区告诉发送端自己的接收窗口大小,它不像发送端,当发出一个数据段超时,就可以认为网络已经拥塞了4.发送端会根据这个窗口大小发送数据5.接收端收到数据后会回复确认ACK,此ACK有可能累积,收到多个报文端回复一个ACK6.发送端收到确认号,...原创 2017-09-29 14:47:19 · 192 阅读 · 0 评论 -
线程分离
[url]http://www.cnblogs.com/mydomain/archive/2011/08/14/2138454.html[/url]线程的分离与结合 在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是...原创 2014-09-01 10:00:35 · 86 阅读 · 0 评论 -
线程返回值传出
[code="c"]#include #include #include #include void printId(const char* s){ pid_t pid = getpid(); pthread_t tid = pthread_self(); printf("%s pid %u tid %u (0x%x)\n",s,(unsi...原创 2014-08-31 09:56:13 · 165 阅读 · 0 评论 -
信 号
信号就是软件中断,它提供了一种处理异步事件的方法,例如,终端用户键入中断键,则会通过信号机制停止一个程序,或及早终止管道中的下一个程序.信号以SIG开头,SIGABRT是夭折信号,当进程调用abort函数时产生这种信号.SIGALRM是闹钟信号,当由alarm函数设置的计时器超时后产生此信号.SIGINT:用户DELETE或Ctrl+C[code="c++"]#include ...原创 2014-08-29 10:15:22 · 97 阅读 · 0 评论 -
TIMEWAIT与CLOSEWAIT
[url]http://blog.youkuaiyun.com/kobejayandy/article/details/17655739[/url]TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器...原创 2015-03-17 11:32:00 · 263 阅读 · 0 评论 -
孤儿进程
一个父进程已经终止的进程称为孤儿进程,这种进程由init进程"收养".原创 2014-08-18 15:17:52 · 121 阅读 · 0 评论 -
fork
[code="c++"]#include #include #include #include using namespace std;int num = 0;int main(){ pid_t pid; num++; if((pid=fork())原创 2014-08-18 14:52:47 · 87 阅读 · 0 评论 -
打开文件
[code="c++"]#include #include #include using namespace std;int main(){ FILE* fp = fopen("a.txt","r"); if(fp==NULL) { cout原创 2014-08-12 16:10:45 · 124 阅读 · 0 评论 -
递归删除目录
[code="c++"]#include #include #include #include #include #include #include using namespace std;#define TIME_CHN_FMT "%Y-%m-%d %H:%M:%S"char* timeToString(time_t tmTime, const c...原创 2014-08-12 15:27:04 · 132 阅读 · 0 评论 -
文件读写
[code="c++"]#include "unistd.h"#include "fcntl.h"#include using namespace std;int main(){ int fd = open("test.txt",O_RDWR | O_CREAT | O_APPEND); if(write(fd,"test",4)!=4){ ...原创 2014-08-10 20:50:07 · 94 阅读 · 0 评论 -
TcpClient
TcpClient.h[code="c++"]#ifndef TCPCLIENT_H#define TCPCLIENT_H#define ERR_REUSEADDR -14#define TCP_SEND_FAIL -1 //tcp发送失败#define TCP_BIND_FAIL -2 //tcp绑定失败#define TCP_CONN_FAIL ...原创 2015-01-16 17:46:02 · 152 阅读 · 0 评论 -
关于锁
很多人误认为用锁会让程序变慢,其实真正影响性能的不是锁,而是锁争用(lock contention).所以像云风那样的服务器端大神总是要花时间写出无锁版的算法...原创 2013-09-03 21:10:16 · 80 阅读 · 0 评论 -
Telnet和Rlogin(远程登录)
1.Telnet是一种最老的Internet应用,起源于1969年的ARPANET。它的名字是“电信网络协议(telcecommunication network protocol)”的缩写词2.Rlogin起源于伯克利Unix,开始它只能工作在Unix系统之间,现在已经可以在其他操作系统上运行...原创 2013-08-06 22:23:35 · 659 阅读 · 0 评论 -
SNMP(简单网络管理协议)
网络管理包含3个组成部分:1.一个管理信息库MIB(Management Information Base).管理信息库包含所有代理进程的所有可被查询和修改的参数。2.关于MIB的一套公用的结构和表示符号。叫做管理信息结构SMI(Structure of Management Information)。3.管理进程和代理进程之间的通信协议,叫做简单网络管理协议SNMP(Simple N...原创 2013-08-05 21:30:02 · 176 阅读 · 0 评论 -
TCP的保活定时器
在连接空闲两小时后,在一个连接上发送一个探查分组来完成保活功能。可能会发生4种不同的情况:对端仍然运行正常、对端已经崩溃、对端已经崩溃并重新启动以及对端当前无法到达。...原创 2013-08-04 10:35:13 · 148 阅读 · 0 评论 -
TCP的坚持定时器
如果一个确认丢失了,则双方就有可能因为等待对方而使连接终止:接收方等待接收数据,而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,发送方使用一个坚持定时器来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查。在连接的一方需要发送数据但对方已通告窗口大小为0时,就需要设置TCP的坚持定时器...原创 2013-08-04 10:31:37 · 114 阅读 · 0 评论 -
TCP的超时和重传
对于每个连接,TCP管理4个不同的定时器1.重传定时器使用于当希望收到另一端的确认。2.坚持定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收端口。3.保活定时器可检测到一个空闲连接的另一端何时崩溃或重启4.2MSL定时器测量一个连接处于TIME_WAIT状态的时间IMCP差错:常见的有源站抑制,主机不可达和网络不可达。...原创 2013-08-03 14:36:04 · 87 阅读 · 0 评论 -
trylock
[code="c++"]#include #include using namespace std;pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;void testLock(){ int ret = pthread_mutex_trylock(&g_mutex); cout原创 2014-09-01 10:07:37 · 110 阅读 · 0 评论 -
读写锁
[code="c++"]#include #include #include using namespace std;pthread_rwlock_t g_mutex = PTHREAD_RWLOCK_INITIALIZER;int g_num = 0;int g_loopNum = 10000;int g_usleepTime = 1;void* te...原创 2014-09-01 10:33:57 · 103 阅读 · 0 评论 -
rawsocket发送tcp包
testTcp.h[code="c++"]#ifndef TESTTCP_H#define TESTTCP_H#include #pragma pack(1)//ip协议头struct IPHeader{ unsigned char headerLen:4; unsigned char version:4; unsigned c...原创 2017-09-25 11:52:05 · 1381 阅读 · 0 评论 -
柔性数组
[code="c++"]#include #include using namespace std;class A{public: A(){}public: char c; char data_arr[];//柔性数组并不占空间,有些编译器也支持arr[0],一般可用于变长结构体中,如在网络编程中需要发送的content长度不确定};...原创 2017-09-20 09:53:26 · 94 阅读 · 0 评论 -
rawsocket发送dns包
[code="c++"]#include #include #include #include #include #include #include using namespace std;char g_testDomain[32] = "www.baidu.com.";int g_dstPort = 53;struct IPHeader{...原创 2017-09-14 15:18:10 · 500 阅读 · 0 评论 -
rawsocket发送icmp包
[code="c++"]#include #include #include #include #include #include #include #include #include #include using namespace std;#define PING_DATA_LEN 56//ICMP消息头部struct ICMPH...原创 2017-09-06 09:54:39 · 1522 阅读 · 1 评论 -
TCP各状态的意义
各个状态的意义如下: LISTEN - 侦听来自远方TCP端口的连接请求; SYN-SENT -在发送连接请求后等待匹配的连接请求; SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认; ESTABLISHED- 代表一个打开的连接,数据可以传送给用户; FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;FIN-W...原创 2016-03-01 14:06:09 · 314 阅读 · 0 评论 -
netfilter
[url]http://blog.chinaunix.net/uid-23069658-id-3160506.html[/url]原创 2016-10-04 20:31:31 · 114 阅读 · 0 评论 -
信号量与双缓冲
双缓冲[code="c++"]#include #include #include #include #include #include #include #include using namespace std;vector v1;vector v2;sem_t semaphore;unsigned int vectorSize =...原创 2014-04-29 08:23:23 · 238 阅读 · 0 评论 -
tcp与udp
http://bbs.youkuaiyun.com/topics/360240000TCP是面向流的, 流, 要说明就像河水一样, 只要有水, 就会一直流向低处, 不会间断. TCP为了提高传输效率, 发送数据的时候, 并不是直接发送数据到网路, 而是先暂存到系统缓冲, 超过时间或者缓冲满了, 才把缓冲区的内容发送出去, 这样, 就可以有效提高发送效率. 所以会造成所谓的粘包, 即前一份Send的数据...原创 2014-04-29 08:20:36 · 102 阅读 · 0 评论 -
gdb的简单使用
注意编译的时间加上-g参数1.调试运行gdb a.out2.执行r3.在某一行设置断电break 134.单步调试n5.单步调试进函数s6.继续执行被调试程序,直至下一个断点或程序结束c7.设置命令行参数gdb a.outset args 1 2 3或 r 1 2 3...原创 2016-09-19 15:18:29 · 103 阅读 · 0 评论 -
信号量
[code="c++"][code="c++"]#include #include #include #include #include using namespace std;sem_t semProducer,semConsumer;vector v;void* producer(void*){ while(1) { ...原创 2014-09-26 10:20:53 · 90 阅读 · 0 评论 -
共享内存
SharedMemory.h[code="c"]#ifndef SHAREDMEMORY_H#define SHAREDMEMORY_Hnamespace Utility{//获取shmIdint initShm(const char* fileName);//清除shmIdint closeShmMessage(int shmId);//向...原创 2014-09-17 10:39:37 · 122 阅读 · 0 评论 -
记录锁
[code="c++"]#include #include #include #include #include #include using namespace std;/* lockType:F_RDLCK,F_WRLCK,F_UNLCK*/int controlFile(int fd,int lockType){ struc...原创 2014-09-11 16:32:52 · 107 阅读 · 0 评论 -
popen
[code="c++"]#include #include #include using namespace std;int main(){ char cmd[64] = "ls /usr/local"; FILE* fp = popen(cmd,"r"); if(fp==NULL) { cout原创 2014-09-06 14:50:48 · 111 阅读 · 0 评论 -
大小端存储
[code="c"]#include int main(){ union{ short s; char c[sizeof(short)]; }un; un.s = 0x0102; if(sizeof(short)==2) { if(un.c[0]==1&&un.c[1]==2...原创 2014-09-05 09:29:30 · 120 阅读 · 0 评论 -
log
log.h[code="c++"]#ifndef __LOG_H__#define __LOG_H__#include #include namespace log{#define LOG_MAX_LENGTH 4096#define FLUSH_LINE 2#define EMERG 8 //#define ALERT 7 //...原创 2015-03-30 17:42:28 · 119 阅读 · 0 评论 -
条件变量(cond)
[code="c++"]#include #include #include using namespace std;int * g_ptr = NULL;pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER;pthread_mutex_t g_mutex;void* testCond(void*){ ...原创 2014-09-01 11:02:44 · 794 阅读 · 0 评论 -
TCP连接的建立与终止
连接建立的三次握手:1.请求端发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)2.服务器发回包含服务器的初始序号的SYN报文段作为应答。同时将确认序号设置为客户的ISN+1以对客户的SYN报文段进行确认。3.客户必须将确认序号设置为服务器的ISN+1以对服务器的SYN报文段进行确认。[img]http://dl2.iteye.com/upload/atta...原创 2013-07-31 22:23:30 · 83 阅读 · 0 评论 -
TCP(传输控制协议)
TCP提供一种面向连接的、可靠的字节流服务。它通过以下方式来提供可靠性:1.应用数据被分割成TCP认为最适合发送的数据块。由TCP传递给IP的信息单位称为报文段或段(segment)2.当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。3.当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不...原创 2013-07-30 21:34:09 · 111 阅读 · 0 评论 -
BOOTP(引导程序协议)
BOOTP:引导程序协议,用于无盘系统进行系统引导的替代方法。使用UDP,为引导系统获得它的IP地址提供了除RARP外的另外一种选择。还能返回路由器地址,客户的子网掩码和名字服务器的IP地址它有两个熟知端口:服务器为67,客户为68....原创 2013-07-30 21:19:45 · 477 阅读 · 0 评论 -
UDP套接字
UDP:是无连接不可靠的数据报协议,一些常见的程序有:DNS(域名系统),NFS(网络文件系统)和SNMP(简单网络管理协议).UDP和TCP在首部中都有覆盖它们首部和数据的检验和.UDP的检验和是可选的,而TCP的检验和是必需的.如果发送端没有计算检验和而接收端检测到检验和有差错,那么UDP数据报就要被悄悄地丢弃.不产生任何差错报文.其目的是为了发现UDP首部和数据在发送端到接收端之间发...原创 2012-03-07 22:24:07 · 138 阅读 · 0 评论 -
poll函数
#includeint poll(struct pollfd *fdarray,unsignd long nfds,int timeout);第一个参数指向一个结构数组第一个元素的指针.每个数组元素都是一个pollfd结构,用于指定测试某个给定描述符fd的条件.timeout:是毫秒数...原创 2012-03-05 22:00:47 · 78 阅读 · 0 评论