网络编程中close和shutdown区别
来源:互联网 发布:linux坏了怎么卸载 编辑:程序博客网 时间:2024/06/09 06:13
1.close()函数
- <span style="font-size:13px;">#include<unistd.h>
- int close(int sockfd); //返回成功为0,出错为-1.</span>
close 一个套接字的默认行为是把套接字标记为已关闭,然后立即返回到调用进程,该套接字描述符不能再由调用进程使用,也就是说它不能再作为read或write的第一个参数,然而TCP将尝试发送已排队等待发送到对端的任何数据,发送完毕后发生的是正常的TCP连接终止序列。
在多进程并发服务器中,父子进程共享着套接字,套接字描述符引用计数记录着共享着的进程个数,当父进程或某一子进程close掉套接字时,描述符引用计数会相应的减一,当引用计数仍大于零时,这个close调用就不会引发TCP的四路握手断连过程。
2.shutdown()函数
- <span style="font-size:13px;">#include<sys/socket.h>
- int shutdown(int sockfd,int howto); //返回成功为0,出错为-1.</span>
该函数的行为依赖于howto的值
1.SHUT_RD:值为0,关闭连接的读这一半。
2.SHUT_WR:值为1,关闭连接的写这一半。
3.SHUT_RDWR:值为2,连接的读和写都关闭。
终止网络连接的通用方法是调用close函数。但使用shutdown能更好的控制断连过程(使用第二个参数)。
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)将不会影响到其它进程. 得自己理解引用计数的用法了
0 0
- 网络编程中close和shutdown区别
- 网络编程中close与shutdown区别
- Socket 编程中 close() 和 shutdown() 有什么区别?
- 网络编程中的close和shutdown
- 【webbench】socket中close()和shutdown()区别
- socket中close()和shutdown()区别
- UNIX网络编程之close函数和shutdown函数的区别
- 网络编程中的SIGPIPE信号以及close和shutdown
- 套接字编程中close与shutdown的区别
- linux编程中close与shutdown的区别
- shutdown和close的区别
- shutdown和close的区别
- shutdown和close的区别
- shutdown和close的区别
- close和shutdown的区别
- close和shutdown的区别
- TCP编程中的shutdown和close的区别
- close 与 shutdown 《Unix网络编程》
- UVA - 694 The Collatz Sequence
- ubuntu上的网易云音乐
- HDU-5289<two pointers>
- 聊聊Android的缓存(四)
- bootstrap editable 动态改变列的编辑状态
- 网络编程中close和shutdown区别
- ios webview中二维码识别
- mongoDB add user in v3.0 问题的解决(Property 'addUser' of object admin is not a func)
- matlab实战中一些重要的函数总结
- 说说 Objective-C 里的 @()字面量语法
- Graph_tool的简单安装 ubuntu15.10
- 花生米三连发(动规)
- AVL树进行插入的非递归函数
- RHEL-6忘记root密码的解决办法