分类: 系统运维
2011-04-19 20:32:10
16.2
...如果我们dup了一个socket,调用close时只有在指向这个socket的所有描述符都关闭之后才会回收这个socket的资源.而调用shutdown就可以单独的控制每一个描述符.问题在于,shutdown也并不会在一个socket仍然有活动的描述符指向的时候释放资源,所以实际上调用shutdow也好,close也罢,只要有活动的描述符,这个socket仍然存在,只不过调用shutdown会更直观而不容易误解.所以,调用shutdown的主要目的还应该是可以单独的控制一个socket的某一个方向的读或者写.
16.3
...MSB总是在最左边,LSB总是在最右边.对于一个整数A=0x04030201,MSB必然是04,LSB必然是01,但是如果把这个整数cast到一个字符指针,比方说cp,那么对于小端的机器,cp指向的就是LSB,而cp+3指的就是MSB,反过来,对于大端的机器,cp指向的是MSB,而cp+3就指向LSB.因为对于小端的机器,一个字的地址是低位字节的地址,也就是LSB,当执行cp=&A这样的操作时,cp就指向了A的LSB.大端的机器就正好相反了.这里就有个问题,为什么对于大端的架构,cp[3]会指向LSB?因为按照一般概念,cp+3应该会指向下一个字.对于网络字节流,这个倒是很好解释,因为指针只是在向后移动,而当这些流数据存储到存储器并且在将来某个时刻需要读取时会是什么情况呢?
大体上,我们可以认为cpu对内存数据的访问总是以字为单位,也就是4个字节(假设是32位的体系),对于大端机器,
一个字的地址是这四个字节中高位的地址,假设我们要把网络数据流写入内存,第一个字的MSB存放的是第一个字节,LSB存放的是第4个字节,而第五个字节存放的位置会是下一个字的MSB,以此类推;当读数据时,所取的数据则是一个字高位字节开始往下的四个字节,对于小端则相反.
实际上,如果通讯时总是以字符流来对待传输的数据,大端小端并不是太需要考虑的问题,只有涉及到类型转换时才需要注意.
...sockaddr是个通用的地址结构,其中的sa_data元素会随不同的平台和不同的协议发生变化.比方说在Linux平台,IPv4的sockaddr_in结构里这一部分会由一个代表端口的整形和一个地址结构和一个填充部分代替,但是这三部分的大小必然会等于sockaddr里所定义的sa_data的大小.这样在做类型转换时不会发生数据不完整的情况.
16.4
...对一个SOCK_DGRAM socket调用connect是可行并且是一种优化手段.
16.7
...对于使用MSG_OOB标志的数据,只有最后一个字节才被认为是紧急数据.
...收到紧急数据就等于收到了一个SIGURG信号,当然必须要事先对这个socket设置好,这里设置的意思就是设置这个socket归属于那个进程或者那一组进程.