socket中的close和shutdown区别
2016-11-07 14:20
239 查看
很明显这个两个函数是有差别的。
close关闭的是双向的,in out都关了~~但是是引用计数--直到--到为0才真正的关闭~因而是线程安全的。
shutdown 是单向关闭,通过参数指定关闭不同的方向,直接强制关闭,非线程安全;
==================================================================================================
socket 多进程中的shutdown, close使用
当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作:
close(sockfd);
你也可以调用shutdown()函数来关闭该socket。该函数允许你只停止在某个方向上的数据传输,而一个方向上的数据传输继续进行。比如你可以关闭某socket的写操作而允许继续在该socket上接受数据,直至读入所有数据。
以下是UNIX network programming摘抄的
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可直接关闭描述符,不考虑描述符的参考数,可选择中止一个方向的连接。
在多进程中如果一个进程中shutdown(sfd, SHUT_RDWR)后其它的进程将无法进行通信. 如果一个进程close(sfd)将不会
顶
close关闭的是双向的,in out都关了~~但是是引用计数--直到--到为0才真正的关闭~因而是线程安全的。
shutdown 是单向关闭,通过参数指定关闭不同的方向,直接强制关闭,非线程安全;
close
关闭本进程的socket id,但链接还是开着的。怎么理解?我们知道socket描述符是对内核中socket对象的引用。而close操作的正式socket描述符,可以理解为断开了当前进程和内核中socket对象的关系。但是其他进程同样可以和这个socket对象建立关系。当然也就是说连接是开着的(因为其他进程可以通过socket读写数据)shutdown
破坏了socket 链接,读的时候可能侦探到EOF结束符,写的时候可能会收到一个SIGPIPE信号,这个信号可能直到socket buffer被填充了才收到,shutdown还有一个关闭方式的参数,0 不能再读,1不能再写,2 读写都不能。==================================================================================================
socket 多进程中的shutdown, close使用
当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作:
close(sockfd);
你也可以调用shutdown()函数来关闭该socket。该函数允许你只停止在某个方向上的数据传输,而一个方向上的数据传输继续进行。比如你可以关闭某socket的写操作而允许继续在该socket上接受数据,直至读入所有数据。
以下是UNIX network programming摘抄的
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可直接关闭描述符,不考虑描述符的参考数,可选择中止一个方向的连接。
注意:
如果有多个进程共享一个套接字,close每被调用一次,计数减1,直到计数为0时,也就是所用进程都调用了close,套接字将被释放。在多进程中如果一个进程中shutdown(sfd, SHUT_RDWR)后其它的进程将无法进行通信. 如果一个进程close(sfd)将不会
顶
相关文章推荐
- socket :shutdown 与 close 函数 的区别
- Java Socket close和Shutdown的区别
- Linux-socket的close和shutdown区别及应用场景
- socket半关闭 shutdown close 区别
- socket编程——关闭(shutdown 和 close的区别)
- socket关闭的close和shutdown区别
- linux网络编程之socket(十):shutdown 与 close 函数 的区别
- socket shutdown和close的区别
- linux网络编程之socket(十):shutdown 与 close 函数 的区别
- socket关闭的close和shutdown区别
- socket链接的关闭close和shutdown的区别,TIME_WAIT和CLOSE_WAIT什么时刻出现,如何处理
- socket关闭close和shutdown区别
- linux网络编程之socket(十):shutdown 与 close 函数 的区别
- 【webbench】socket中close()和shutdown()区别
- socket关闭的close和shutdown区别[转]
- Socket 编程中 close() 和 shutdown() 有什么区别?
- socket链接的关闭close和shutdown的区别_TIME_WAIT和CLOSE_WAIT什么时刻出现_如何处理
- socket关闭close和shutdown的区别
- socket中close()和shutdown()区别
- socket的close和shutdown的区别