如何在c语言下关闭socket
c语言关闭socket的两种方式
一、shutdown()
#include<sys/socket.h> int shutdown(int sockfd,int how);
how的方式有三种分别是
SHUT_RD(0):关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。不允许接受。
SHUT_WR(1):关闭sockfd的写功能,此选项将不允许sockfd进行写操作。不允许发送。
SHUT_RDWR(2):关闭sockfd的读写功能。不允许发送和接受(和 close() 一样)。
成功则返回0,错误返回-1,错误码errno:EBADF表示sockfd不是一个有效描述符;ENOTCONN表示sockfd未连接;ENOTSOCK表示sockfd是一个文件描述符而不是socket描述符。
二、close()
#include<unistd.h> int close(int fd);
关闭读写。它将防止套接字上更多的数据的读写。任何在另一端读写套接字的企 图都将返回错误信息。
成功则返回0,错误返回-1,错误码errno:EBADF表示fd不是一个有效描述符;EINTR表示close函数被信号中断;EIO表示一个IO错误。
区别:
1、shutdown()在如何关闭套接字上有多一点的控制。shutdown 可以单向关闭,Close不可以。
2、当多线程共享/调用同一个Socket时,Close只是会减1,直到减到0才会真正去关闭Socket,
而shutdown则不会理会有多少线程在用,强制直接关闭socket.
相关推荐
-
如何在C语言中判断socket是否已经断开
下面来介绍判断非阻塞SOCKET是否已经断开的几种方法: 注意要区分不同操作系统分别进行测试, 包括WINDOWS, LINUX和UNIX会各有不同. 在WINDOWS下比较简单,可以使用FD_CLOSE事件判断SOCKET是否已经断开 view plaincopy to clipboardprint? bool IsSocketClosed(SOCKET clientSocket) { bool ret = false; HANDLE closeEvent = WSACreateEvent()
-
如何在c语言下关闭socket
c语言关闭socket的两种方式 一.shutdown() #include<sys/socket.h> int shutdown(int sockfd,int how); how的方式有三种分别是 SHUT_RD(0):关闭sockfd上的读功能,此选项将不允许sockfd进行读操作.不允许接受. SHUT_WR(1):关闭sockfd的写功能,此选项将不允许sockfd进行写操作.不允许发送. SHUT_RDWR(2):关闭sockfd的读写功能.不允许发送和接受(和 close() 一样
-
C语言实现Linux下的socket文件传输实例
本文实例讲述了C语言实现Linux下的socket文件传输.分享给大家供大家参考.具体如下: server.c如下: //////////////////////////////////// //服务器代码 /////////////////////////////////// //本文件是服务器的代码 #include <netinet/in.h> // for sockaddr_in #include <sys/types.h> // for socket #include &
-
如何在 Go语言中使用日志包
目录 Go 语言标准库之log 包 如何将日志消息存储在 Go 中的文件中 定制你的日志记录器 总结 引言: 在我们的日常编程中,日志很重要.只要是我们写代码,就有可能出现 Bug.日志文件就是一种快速找到这些 bug,更好地了解程序工作状态的方法. 让我们来看一下日志文件的定义: 日志文件是记录操作系统或其他软件运行中发生的事件或通信软件的不同用户之间的消息的文件.记录是保存日志的行为. 日志是开发人员的眼睛和耳朵,可以用来跟踪.定位错误.调试和分析代码,并监控应用程序的性能.在最简单的情况下
-
详解如何在Go语言中调用C源代码
目录 开坑说明 内嵌形式 外置的C代码 1. 构建libauth.a静态库 2. 对main.go稍加修改 3. 编译 开坑说明 最近在编写客户端程序或与其他部门做功能集成时多次碰到了跨语言的sdk集成,虽说方案很多诸如rpc啊,管道啊,文件io啊,unix socket啊之类的不要太多,但最完美的基础方式还是让程序与sdk结合到一起(个人观点,不喜勿喷),顺便研究了下在go调用标准c接口的种种方法与坑,内容不少,有空便慢慢更新了. 内嵌形式 先让我们来看一个最简单的cgo实例 package
-
解决time_wait强制关闭socket
解决time_wait 今天我在测试代码的时候,边开边看电影,服务端的CPU消耗和内存使用让我挺满意的 可是过了一会,在统计达到了一定连接后,后来连接很多无法登陆.象上公交车,拥 挤不堪无法上车,用netstat -an查看了下连接状态,time_wait状态的端口非常多 原因就在此了,消耗完系统的端口数,服务端将就无法接收新连接,找到问题就来说明 time_wait,这个东西默认存活时间为2分钟,够长的,这点很要命,更多的大家百度下 对付这个问题,我写了一个函数,强制关闭socket,代码环境
-
如何在Linux操作系统下安装Apache服务的方法实例详解
链接下载: 操作环境 VMware虚拟机中CentOS 7.6 SecureCRT Xftp(Xmanager) 需求分析 使用Apache服务实现访问http 操作步骤 1.挂载光盘 [root@localhost ~]# mount /dev/cdrom /mnt 查看是否挂载 [root@localhost ~]# df -Th 2.从源码包编译安装程序 (编译安装) [root@localhost Packages]# yum -y install gcc gcc-c++ make 3.
-
详解如何在Go语言中循环数据结构
目录 如何在Go中循环字符串 如何在Go中循环map结构 如何在Go中循环Struct 数组是存储类似类型数据的强大数据结构.您可以通过索引识别和访问其中的元素. 在Golang中,您可以通过在0初始化变量i并增加变量直到它达到数组的长度,使用for循环循环数组. 它们的语法如下所示: for i := 0; i < len(arr); i++ { // perform an operation } 例如,让我们循环一个整数数组: package main import ( "fmt&qu
-
如何在IIS环境下配置Rewrite规则 图文
URL 静态化可以提高搜索引擎抓取,开启本功能需要对 Web 服务器增加相应的 Rewrite 规则,且会轻微增加服务器负担.本教程讲解如何在 IIS 环境下配置各个产品的 Rewrite 规则. 一.首先下载 Rewrite.zip 的包,解压到任意盘上的任意目录. 各个产品的 Rewrite 规则包不同,请选择对应的产品下载对应的 Rewrite 规则. Discuz!6.0.0/6.1.0 的 Rewrite 规则下载地址:Rewrite.zip UCenter Home1.0.0 的 R
-
Go语言中关闭带缓冲区的频道实例分析
本文实例分析了Go语言中关闭带缓冲区的频道.分享给大家供大家参考.具体分析如下: Go语言提供了两种频道,带缓冲区和不带缓冲区的.不带缓冲区的频道,发送和接收是同步的,必须接收端接收了消息,发送端才能从发送调用中解脱.带缓冲区的频道,在缓冲区满之前,发送和接收是异步的,发送端的发送操作只保证把消息放入缓冲区. Go的频道是可以关闭的,关闭频道的目的是让接收端知道不会再有消息从这个频道进入,我们可能会用某个频道的关闭来表示某种状态的终结. 当我们关闭一个带缓冲区的频道时,如果缓冲区中还有消息,接收
随机推荐
- 如何轻松搭建Windows8云平台的开发环境
- jquery实现简单文字提示效果
- java实现的AES秘钥生成算法示例
- Windows下安装python MySQLdb遇到的问题及解决方法
- PHP实现下载功能的代码
- php 生成短网址原理及代码
- MySQL和SQLServer的比较
- PHP简单操作MongoDB的方法(安装及增删改查)
- Ajax核心XMLHttpRequest总结
- MySQL延迟关联性能优化方法
- 最佳6款用于移动网站开发的jQuery 图片滑块插件小结
- SQL Server 2005 DTS导入平面数据出现错误解决方案
- JavaScript下拉菜单功能实例代码
- 探寻Javascript执行效率问题
- js的一些常用方法小结
- 高内聚低耦合原则_动力节点Java学院整理
- C#判断三角形的类型
- Android Init进程对信号的处理流程详细介绍
- 解读vue生成的文件目录结构及说明
- 详解Linux服务器状态、性能相关命令