socket注意事项

socket注意事项_第1张图片
Socket TCP流程图
socket注意事项_第2张图片
Socket UDP流程图

Socket TCP 和 UDP最大的区别就是:
UDP 套接字没有 listen

TCP 套接字使用recv()/send(), UDP 套接字使用 recvfrom()/sendto()

TCP关闭的两种方式

  • 主动关闭一段发送 FIN, 被动关闭一段回应 ACK,并发送 FIN, 主动关闭一端发送 ACK。这是优雅的关闭连接,保证所有数据都能正确发送接收。
  • 一方发送 RST, 对方收到该报文,立刻断开连接。

shutdown()和close()的区别

  1. 调用close(), 它会将文件描述符的调用减一,仅在该计数变为 0 的时候才关闭套接字; 而 shutdown() 将直接激发TCP 关闭套接字。
  2. close()终止两个方向的传输;shutdown() 可以选择只关闭 或者 或者读写都关闭。

recv()返回的三种情况

  1. 如果对端发送 TCP 数据, 套接字变为可读,返回一个大于0的数,这个数就是对方发送数据的字节数。
  2. 如果对端发送 FIN, 套接字变为可读, 返回 0(EOF), 表示对方关闭连接。
  3. 如果对端发送 RST(对端主机崩溃,并重新启动), 套接字变为可读, 返回 -1errno包含明确的错误码。

你可能感兴趣的:(socket注意事项)