【webbench】socket中close()和shutdown()区别

来源:互联网 发布:农村淘宝店在哪申请 编辑:程序博客网 时间:2024/06/06 06:36

最近看webbench和Tinyhttpd源码的一点学习:

在fork()或create()一个新的进程时,关闭socket连接总是用close()而不是shutdown(),百度了一下区别:

首先介绍一下close()shutdown():

函数:int shutdown(int s, int how);
函数说明:shutdown()用来终止参数s 所指定的socket 连线. 参数s 是连线中的socket 处理代码, 参数how有下列几种情况:
   how=0 终止读取操作.
   how=1 终止传送操作
   how=2 终止读取及传送操作
返回值:成功则返回0, 失败返回-1, 错误原因存于errno.

函数:int close(int s);
函数说明:close()用来终止参数s 所指定的socket 连线.
返回值:成功则返回0, 失败返回-1, 错误原因存于errno.

区别:

1.可以看到很明显的就是参数导致的区别:进程中close关闭一个socket,将终止进程对这个socket的任何的操作,但是使用shutdown可以选择的关闭关闭的方式,包括SHUT_RD(读),SHUT_WR(x写),SHUT_RDWR(读写) 三种方式。

2.在多个进程共享socket时候,一个进程调用close只会使计数减一(引用计数?),直到所有的进程都调用的了colse,这个socket才会被释放,
 
如果一个进程调用shutdown,那个这个所有的进程将不能再使用读、写或者读写。
 
总结区别2 ,就是close不会影响其他进程对socket的使用,shutdown会影响其他进程对socket的使用。


0 0
原创粉丝点击