wangbinyq / personal-wiki

2 stars 0 forks source link

tcp编程常见问题 #1

Open wangbinyq opened 8 years ago

wangbinyq commented 8 years ago

tcp 分包

tcp 是一种流模式的协议,udp 是一种数据报模式的协议

异常错误处理

EMSGSIZE,发送的数据长度大于套接口发送缓冲区大小 EAGAIN,EWOUDLBLOCK,非阻塞socket返回

对于软件异常、错误,应用层能感知到比如,比较好处理。而对于硬件层的异常错误,比如服务器断电,此时由于服务端不会发送RST,使客户端认为连接还一直存在,这时就需要在应用层添加心跳(tcp提供的keeplive的时间太长)。

断开连接

有close和shutdown方法。

使用close中止一个连接,但它只是减少描述符的参考数,并不直接关闭连接,只有当描述符的参考数为0时才关闭连接。 shutdown可直接关闭描述符,不考虑描述符的参考数,可选择中止一个方向的连接。


A more common (and not event-driven) approach is to call shutdown(), then call recv() in a loop until it returns 0 (graceful disconnect) or SOCKET_ERROR, then call close().

同步、异步,阻塞、非阻塞