zoukankan      html  css  js  c++  java
  • close()和shutdown()函数

    一·close(int sockfd)

      当server和client建立连接,server调用close(),则server发送fin给client,server不在通过该套接字继续传送消息或者接收消息,此时client调用read,如果接收到fin则返回0,但是此时的client还是可以write给server,并且write只是将信息发送给缓冲区,当server收到该数据报会返回一个rst数据报连接重置,表示server不再接受消息,如果要传送消息,则需要连接重置。client接收到RST后并不会直接传送给应用层,只是将该状态保存在TCP协议层,当client再次调用write给server时,因为连接已经处于RST状态,则不再有数据发出,而是SIGPIPE一个信号给应用层.仅此计数为0时才关闭套接字,发送TCP的正常连接终止序列

      并且该函数并不是真正的四分组终止序列,而是将描述符的访问计数-1,

    二·shutdown(int sockfd,int howto)

      1>close将描述符的访问计数-1,只有在此计数为0时关闭套接字。用shutdown激发TCP的正常连接终止序列,而不管访问计数。

      2>close终止了数据传送的两个方向:读和写。由于TCP连接数全双工的,有很多时候要通知另一端已完成了数据发送,即使另一端有很多数据要发送也是如此,shutdown函数可以仅仅关闭连接的读,写或两个方向都关闭

      howto:

      1.SHUT_RD 关闭连接的读一半,不再接受套接口的数据,而且留在套接口接收缓冲区中的数据都作废,进程不能再对套接口执行任何读进程。调用此函数后,TCP套接口接受的数据被接收,但数据本身被扔掉。

      2.SHUT_WD 关闭连接的写一半 此情况称为半关闭,当前留在套接口发送给缓冲区的数据都被发送,后跟正常的TCP终止序列,进程不能在执行对套接口的任何写函数。

      3.SHUT_RDWR 连接的读这一半和写这一半都关闭,等同于调用函数shutdown()两次,第一次调用时用SHUT_RD,第二次调用时用SHUT_WR。

      

  • 相关阅读:
    2012 Multi-University Training Contest 8
    uva 11354最小生成树瓶颈路(lca算法实现)(rmq在多校二中有一道题)
    POJ 3164最小树形图
    uva11865 二分+最小树形图(朱刘算法)
    LA 5717枚举+最小生成树回路性质
    2014/3/9 长沙多校(第二次)
    zoj3759(待解决+算法木有问题+but需要java大数)
    ztr loves lucky numbers--hdu5676(DFS)
    C. Nearest vectors--cf598C(极角排序)
    D. Spongebob and Squares--cf599D(数学)
  • 原文地址:https://www.cnblogs.com/chenyang920/p/5499232.html
Copyright © 2011-2022 走看看