一、tcp:
1、tcp每个套接字都有一个缓冲区,当应用进程调用write时便把应用层的数据写入套接字的缓冲区;
2、如果套接字的缓冲区容不下应用层的数据,则write阻塞。write返回只表示将数据写到了套接口缓冲区,并不表示发送出去;
3、套接字的缓冲区里的数据需收到接收方的确认消息(ack)才会删除缓冲区里的数据。
二、udp:
1、udp是不可靠的,因此无需缓冲区保存应用层传过来的数据。只是将数据拷贝到内核的缓冲区,链路层发送出去以后就将拷贝丢弃;
2、udp只有一个缓冲区大小的概念,如果应用层发送一个大于缓冲区大小的数据,则返回EMSGSIZE错误;
3、从udp的write成功返回表示已成功将数据报或所有片段加入数据链路层的输出队列。