socket关闭的close和shutdown区别

转载 2015年07月10日 10:03:42
socket关闭close和shutdown

socket关闭有2个close,shutdown

他们之间的区别:

close-----关闭本进程的socket id,但链接还是开着的,用这个socket id的其它进程还能用这个链接,能读或写这个socket id

shutdown--则破坏了socket 链接,读的时候可能侦探到EOF结束符,写的时候可能会收到一个SIGPIPE信号,这个信号可能直到

socket buffer被填充了才收到,shutdown还有一个关闭方式的参数,0 不能再读,1不能再写,2 读写都不能。

===============================================================================================================

socket 多进程中的shutdown, close使用
当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作:
close(sockfd);


你也可以调用shutdown()函数来关闭该socket。该函数允许你只停止在某个方向上的数据传输,而一个方向上的数据传输继

续进行。如你可以关闭某socket的写操作而允许继续在该socket上接受数据,直至读入所有数据。
int shutdown(int sockfd,int how);
Sockfd是需要关闭的socket的描述符。参数 how允许为shutdown操作选择以下几种方式:
    SHUT_RD:关闭连接的读端。也就是该套接字不再接受数据,任何当前在套接字接受缓冲区的数据将被丢弃。进程将不能对该

套接字发出任何读操作。对TCP套接字该调用之后接受到的任何数据将被确认然后无声的丢弃掉。
    SHUT_WR:关闭连接的写端,进程不能在对此套接字发出写操作
    SHUT_RDWR:相当于调用shutdown两次:首先是以SHUT_RD,然后以SHUT_WR


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

注意:
    1>. 如果有多个进程共享一个套接字,close每被调用一次,计数减1,直到计数为0时,也就是所用进程都调用了close,套

接字将被释放。
    2>. 在多进程中如果一个进程中shutdown(sfd, SHUT_RDWR)后其它的进程将无法进行通信. 如果一个进程close(sfd)将不会

影响到其它进程. 得自己理解引用计数的用法了. 有Kernel编程知识的更好理解了.

相关文章推荐

调用closesocket()背后发生的事

应用层代码想要关闭一个TCP连接可以直接调用closesocket(),但是这个函数的行为并不“单纯”,只有了解closesocket()背后的故事,才能对关闭TCP连接有正确的认识。 首先明确一点...

Socket的正确关闭(改良版)

TIME_WAIT状态 如果服务端的Socket比客户端的Socket先关闭,会导致客户端出现TIME_WAIT状态,占用系统资源。 所以,必须等客户端先关闭Socket后,服务器端再关闭S...
  • hunkcai
  • hunkcai
  • 2010年08月11日 12:02
  • 29456

linux下socket的close和shutdown

在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义 #include int shutdown(int sockfd,int...

closesocket, shutdown, tcp::socket.close()

来,咱们彻底的来讨论一下这个shutdown   和closesocket  从函数调用上来分析(msdn):一旦完成了套接字的连接,应当将套接字关闭,并且释放其套接字句柄所占用的所有资源。真正释放...

windows下socket编程:区分shutdown()及closesocket()

以下描述主要是针对windows平台下的TCP socket而言。首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包(F...
  • nickms
  • nickms
  • 2011年06月20日 20:49
  • 13560

closesocket()

转载:http://baike.baidu.com/view/569187.htm 简述:   关闭一个套接口。   #include   int PASCAL FAR clos...

closesocket()背后发生的事

应用层代码想要关闭一个TCP连接可以直接调用closesocket(),但是这个函数的行为并不“单纯”,只有了解closesocket()背后的故事,才能对关闭TCP连接有正确的认识。 首先明确一点...

socket关闭之close()和shutdown()的差异

对于一个tcp连接,在c语言里一般有2种方法可以将其关闭:close(sock_fd); // 或者 shutdown(sock_fd, ...);多数情况下这2个方法的效果没有区别,可以互换使用。除...

socket关闭的close和shutdown区别[转]

socket关闭close和shutdown socket关闭有2个close,shutdown 他们之间的区别: close-----关闭本进程的socket id,但链接还是开着...

Socket的正确关闭(改良版)

原文地址:http://blog.csdn.net/hunkcai/article/details/5803651 TIME_WAIT状态 如果服务端的Socket比客户端的Socket先关...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:socket关闭的close和shutdown区别
举报原因:
原因补充:

(最多只允许输入30个字)