5/27:
1、IPv6地址有128位,共16字节。两个字节一组并用冒号隔开的十六进制数字组合。如:
2000:fdb8:8000:0000:0000:0001:00ab:853c:39a1,可以省略前导零,因此第5组和第6组可以只呈现1:ab,另外只包含0的一个组序列可以完全省略。上述可以改写为:2000:fdb8:8000::0001:00ab:853c:39a1
2、TCP/IP中主要类型的套接字是流套接字(stream socket)和数据包套接字(datagram socket),前者使用TCP,后者使用UDP。
3、Sockets API中,地址和端口总是使用网络字节顺序。网络字节顺序即是大端对齐,高序字节存储在起始地址,基于X86的主机一般采用小端对齐方式,即低序字节存储在起始地址。常用的转换函数有:htons() 与 ntohs(), 前者实现本机字节顺序与网络字节顺序的转换,后者相反。
判断大小端的方法:(union和指针操作)
#include<iostream>
using namespace std;
union s
{
int i;
char a;
};
int main()
{
s my;
int t=0x12345678;
char *p=(char *)&t;
printf("%x\n",*p);
printf("%x\n",*(p+1));
printf("%x\n",*(p+2));
printf("%x\n",*(p+3));
my.i=1;
if(my.a)
cout<<"little"<<endl;
else
cout<<"big"<<endl;
return 0;
}
4、两种常规的技术可以让接收者明确地查找消息得末尾:
1、基于定界符:
通过唯一标记指示消息得末尾,特别是发送者紧接在数据后面传输的协商好的字节或字节序列
2、显示长度:
在长度可变的字段或消息前附加一个长度字段,指出它所包含多少个字节。长度字段一般具有固定的大小,这会限制可以成帧的消息的最大大小。
5、可重入函数:指对于相同的(并且合法的)函数参数(包括无参函数的情况),多次调用此函数产生的行为是可预期的,即函数的行为一致,或者结果相同。不能保证这一点的函数称为不可重入(non-reentrant)函数。
线程安全函数:多个线程调用不会发生资源冲突
两者的关系是:可重入函数一定是线程安全的,线程安全的既可以是可重入,也可能不是重入的。
Strtok() 函数采用了静态变量存储处理字符串的中间状态,所以不是线程安全的函数,她的改进函数strtok_r() 函数则
6、C++可变参数实现方法:在带有可变参数的函数体中如何持有可变参数,一般通过指针访问,循环移动指针获得下一个参数。
7、处理套接字阻塞的三种方法:
a:非阻塞套接字:将套接字设置成非阻塞状态
b:异步I/O:当套接字上发生某个与I/O相关的事情时,把SIGIO信道递送给进程。
c:超时:通过设置计时器,调用unsigned intalarm(unsigned int secs),计时器若发生超时,则产生SIGALRM信号,主进程捕捉此信号并处理即可。
8、每次创建一个进程时,操作系统都必须复制父进程的全部状态,包括:内存、栈、文件/套接字描述符等。线程通过允许在同一个进程内进行多任务处理而减少了这种代价:新创建的线程只是简单地共享与父进程相同的地址空间(代码和数据),而无需复制父进程的状态。