随笔分类 -  网络编程

摘要:机制:select:只支持水平触发(数据不处理完无限通知)epoll:支持水平触发和边缘触发(仅通知一次)单进程监控FD个数select: 由FD_SETSIZE设置,默认值是2048。在大量连接的情况下明显不足。epoll: 和内存有关,1G内存10W个,一般都够用。内核监控事件的策略select... 阅读全文
posted @ 2014-10-19 14:02 白帆mvp 阅读(178) 评论(0) 推荐(0)
摘要:总结: 不仅tcp协议能对数据段进行分割,ip协议也具备这个功能,之所以会这样是两者都受到底层MTU的限制(虽说tcp是根据MSS限制来分割数据包,由于MTU=tcp包头+ip包头+MSS,所以其实也算是受MTU的制约。)。但是尽量别让ip协议来负责数据包的分包工作,因为虽然ip协议会对数据包进行分... 阅读全文
posted @ 2014-10-19 13:16 白帆mvp 阅读(334) 评论(0) 推荐(0)
摘要:listen函数是用来设置监听连接的句柄和队列当listen函数执行完成以后,服务端就已经可以接受客户端来的新连接了,新连接完成以后listen会把客户端的ip,port和连接句柄放在监听队列里面,等待accept函数来取,如果监听队列满了,listen会拒绝新来的连接。accept仅仅是从监听队列... 阅读全文
posted @ 2014-10-19 12:23 白帆mvp 阅读(1345) 评论(0) 推荐(0)
摘要:close函数首先是将传入的socket句柄引用数减1(因为fork进程时会导致socket句柄被多个进程引用),待到引用数等于0的时候,close才会真正关闭连接。shutdown函数是立刻关闭连接(忽视句柄引用数值),关闭有三种方式SHUT_RD 关闭调用进程的读通道,调用进程立刻不能读网络数据... 阅读全文
posted @ 2014-10-19 12:21 白帆mvp 阅读(524) 评论(0) 推荐(0)
摘要:网络程序异常退出无core文件产生这种情况发生在一边连接端已经关闭,但是另外一边还在对连接句柄做send操作,这样做send操作的进程会收到SIGPIPE信号,默认行为是直接退出且不会产生core。为了避免退出,一般在启动的时候加上 signal(SIGPIPE, SIG_IGN) 来忽略这种错误。... 阅读全文
posted @ 2014-10-19 12:20 白帆mvp 阅读(654) 评论(0) 推荐(0)