- 三次握手,客户端发送syn分节会带数据的初始序号j,服务端在单个分节中会发送,ack确认数据序号j+1,同时syn的序号为k,最后客户端回复ack分节k+1
2. tcp和udp发送数据大小都受MTU限制,如果超出MTU大小(1500字节),将被分片
3. connet连接失败,需要close该socket,不能循环调用connect
4. 进程终止时如果没有调动close(fd),内核也会关闭所有fd,并发送FIN分节
5. 信号处理函数的调用会产生中断,会中断accept,read等慢系统调用,errno是EINTER,有的系统会重启被中断的系统调用,有的不会。
6. 如果有多个子进程已经终止,则wait函数每调用一次只返回一个进程的终止信息,所以需要循环调用用waitpid()(切非阻塞调用)来获取所有子进程的终止状态。
7. SO_KEEPALIVE,SO_LINGER,TCP_NAGLE等选型,连接套接字是从监听套接字集成而来的。
8. udp可以发送长度为0的数据,所以接收端read返回0并不表示连接已关闭。
9. udp可以调用connect,调用后sendto和recvfrom将不再填充地址参数,填充会报错。而且只能接受来connect ip和端口的数据。同时还会受到异步错误,为connect的套接字收不到异步错误。
10. 如果需要大量给固定ip和端口发送消息,可以显示调用一次connect,这样效率比较高。因为对于未连接的udp,每次调用sendto都会隐含一次connect操作。
11. inetd是一个互联网超级服务,echo,datetime等服务都是又他提供的。
12. 对于费阻塞sockket,connect()调用会立即返回EINPROCESS,表示建立连接已经启动,但是三次握手还没有完成
13. 调用close,只有文件描述符引用计数减为0才发送FIN,但是调用shutdown可以直接发送FIN。
14. 调用getsockpet来获取套接字上发生的错误。
11-27
1769
