- 浏览: 265494 次
- 性别:
- 来自: 武汉
最新评论
-
daknife:
谢谢你的这篇文章,让我大概了解了select的一部分底层原理。 ...
Linux-2.6.25 select系统调用源码分析 -
gjlzjb:
非常有用,谢谢哈。另外问下,您是否用过Pheonix Syst ...
Why Map/Reduce? -
zhangyafei_kimi:
canbo 写道请问,我怎么生成安装包,提供给其它用户安装呢? ...
下载最新的Google Chrome源码并编译 -
canbo:
请问,我怎么生成安装包,提供给其它用户安装呢?
下载最新的Google Chrome源码并编译
文章列表
Posix系列的recv、recvfrom、read函数均无法得到数据包被截断的错误消息,只有recvmsg可以得到该消息。
ssize_t recvmsg(int socket, struct msghdr *message, int flags);
如果message->msg_flags & MSG_TRUNC为真,则表示数据包被截断。超出部分被丢弃。
但也有例外,Solaris并不设置MSG_TRUNC,直接丢弃超出部分。
SVR4系统不丢弃超出部分,在后续的读操作中会获取超出部分。
Windows下的recv、recvfrom、WSARecv、WSARecvFro ...
- 2008-10-04 11:20
- 浏览 3359
- 评论(0)
一、建立连接
在发送SYN报文段后,如果在75秒没有收到相应相应,连接建立将中止。这个时间也就是阻塞connect系统调用的超时时间。
二、保活
SO_KEEPALIVE选项保持连接检测对方主机是否崩溃,避免(服务器)永远阻塞于TCP连接的输入。设置该选项后,如果2小时内在此套接口的任一方向都没有数据交换,TCP就自动给对方 发一个保持存活探测分节(keepalive probe)。这是一个对方必须响应的TCP分节.它会导致以下三种情况:对方接收一切正常:以期望的ACK响应。2小时后,TCP将发出另一个探测分节。对方已崩溃且已重新启动:以RST响应。套接口的待处理错误被置为ECONNRES ...
- 2008-10-04 11:18
- 浏览 3107
- 评论(0)
Linux 2.6.25中的select系统调用
主要有4个函数:
sys_select:处理时间参数,调用core_sys_select。
core_sys_select:处理三个fd_set参数,调用do_select。
do_select:做select/poll的工作。在合适的时机把自己挂起等待,调用sock_poll。
sock_poll:用函数指针分派到具体的协议层函数tcp_poll、udp_poll、datagram_poll。
层层分工明确,我也要多学习这种方式啊。
/*
sys_select(fs/select.c)
处理了超时值(如果有),将struct tim ...
- 2008-10-04 11:12
- 浏览 11864
- 评论(1)
Introduction
A tuple (or n-tuple) is a fixed size collection of elements. Pairs, triples, quadruples etc. are tuples. In a programming language, a tuple is a data object containing other objects as elements. These element objects may be of different types.
Tuples are convenient in many circumstanc ...
- 2007-10-07 23:13
- 浏览 1597
- 评论(0)
#pragma once
#include <iterator>
#include <functional>
template<
class bidirectional_iterator,
- 2007-09-18 00:25
- 浏览 1209
- 评论(0)
#define SENTINEL_CARD (-1)
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>
#include
- 2007-09-18 00:23
- 浏览 1212
- 评论(0)
本系列全部转载自kuibyshev.bokee.com
1. Boost中的MPL库分析
MPL是由David Abrahams和Aleksey Gurtovoy为方便模板元编程而开发的库,2003年被Boost吸纳为其中的一员,此后又历经一些大幅度修改,目前已经相当完善,其最新版本于2004年11月发布。MPL的出现是C++
- 2007-08-30 23:07
- 浏览 1705
- 评论(0)
本系列全部转载自kuibyshev.bokee.com
1. 模板元编程的基本用途
1.1. 数值计算
上文提及的所有关于模板元编程的例子都是在编译时的数值计算,这是模板元编程的最简单直接的使用方法。数值计算主要利用模板的特化和局部特化能力进行递归演算,模板类被视为元函数,利用类中的一个静态常量保存结果。由于C++模板对非类型的参数有限制,一般只有整型和布尔型可以参加运算。元函数的结果一般放在一个静态的常量中,但对于整型而言还有一个更好的选择,可以放置在枚举中,其唯一的优点是静态常量是左值必须在运行期占有内存地址,也就是分配了内存空间,而枚举值不能作为左值,所以不占用内存空 ...
- 2007-08-30 23:06
- 浏览 1525
- 评论(0)
本系列全部转载自kuibyshev.bokee.com
1. 模板元编程的原理
1.1. 函数式编程
1.1.1. 函数式编程的概念
从上面的例子可以看出,由于模板元编程借助的是C++模板的特化能力,使它的设计方法迥异于普通的C++编程习惯。比如我们不能够在元函数中使用变量,编译期显然只可能接受静态定义的常量,也就因此,我们不能够使用传统意义上的循环;要实现任何分支选择,唯一的方法是调用其它元函数或者使用递归。这种编程风格正是具有重要理论意义的函数式编程(Functional Programming)。
- 2007-08-30 23:02
- 浏览 1536
- 评论(0)
本系列全部转载自kuibyshev.bokee.com
1. 引论
C++的发展史是一个不断吸收程序设计领域精华和不断积累充实语言特性的过程。它的创造者Stroustrup在这门新的编程语言草创之初就定下了几个基本的目标,二十年过去了,至今这些目标仍然是C++继续发展的指南针。其中他明确指出,这种语言不应强迫程序员使用单一程序设计形式[20];就是说C++语言应该是一种“多种花样”的语言。正是因为Stroustrup这种高瞻远瞩的构想,才使得
- 2007-08-30 23:01
- 浏览 1604
- 评论(0)
Source
#ifndef kimi_quicksort
#define kimi_quicksort
#include <functional>
#include <iterator>
#include <algorithm>
- 2007-08-28 03:20
- 浏览 944
- 评论(0)
Introduction
The Boost type-traits library contains a set of very specific traits classes, each of which encapsulate a single trait from the C++ type system; for example, is a type a pointer or a reference type? Or does a type have a trivial constructor, or a const-qualifier?
The type-traits clas ...
- 2007-08-28 01:35
- 浏览 2079
- 评论(0)
介绍一个雕虫小技:编译期判断类的继承性。具体来说就是类型U是否继承自类型T。该技术的灵感和源头来自Andrei Alexandrescue的《Modern C++ Design》。原书中描述的此技术有一个小小的bug。
源代码
template <class T , class U>
class __conversion
{
static char test(U);
static double test(...);
- 2007-08-24 23:00
- 浏览 1107
- 评论(0)
Source
#include <cstddef>
#include <string>
#include <typeinfo>
//#include <boost/config.hpp>
#include <boost/limits.hpp>
#include <boost/throw_exception.hpp>
- 2007-08-24 22:55
- 浏览 1543
- 评论(0)
Source
#pragma once
//shared_ptr的简单实现版本
//基于引用记数的智能指针
//它可以和stl容器完美的配合
namespace kimi_boost
- 2007-08-24 22:51
- 浏览 4187
- 评论(0)