如何在c语言下关闭socket

 更新时间:2019年05月20日 14:19:58   作者:a787188834  
如果不主动关闭socket的话,系统不会自动关闭的,除非当前进程挂掉了,操作系统把占用的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和C++11之enum枚举的具体使用方法

    C和C++11之enum枚举的具体使用方法

    这篇文章主要介绍了C和C++11之enum枚举的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 用C语言实现猜数字游戏

    用C语言实现猜数字游戏

    这篇文章主要为大家详细介绍了用C语言实现猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • C++ throw关键字实现抛出异常和异常规范

    C++ throw关键字实现抛出异常和异常规范

    本文主要介绍了C++ throw关键字实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • C语言 运算符详细介绍及示例代码

    C语言 运算符详细介绍及示例代码

    本文介绍C语言 运算符,这里整理了运算符的基础知识,并附示例代码,希望能帮助刚刚开始学习 C语言的同学
    2016-08-08
  • C语言的sleep、usleep、nanosleep等休眠函数的使用

    C语言的sleep、usleep、nanosleep等休眠函数的使用

    本文主要介绍了C语言的sleep、usleep、nanosleep等休眠函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Qt QStandardItemModel用法小结

    Qt QStandardItemModel用法小结

    QStandardItemModel可用作标准Qt数据类型的存储库,本文主要介绍了Qt QStandardItemModel用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • C语言函数栈帧详解

    C语言函数栈帧详解

    下面小编就为大家带来一篇浅谈C语言函数调用参数压栈的相关问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-10-10
  • C++印刷模板使用方法详解

    C++印刷模板使用方法详解

    模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型
    2022-11-11
  • 如何通过C++求出链表中环的入口结点

    如何通过C++求出链表中环的入口结点

    本文主要介绍了通过C++求解链表中环的入口结点,即给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。需要的朋友可以参考一下
    2021-12-12
  • C 语言中实现环形缓冲区

    C 语言中实现环形缓冲区

    本文主要是介绍 C语言实现环形缓冲区,并附有详细实现代码,具有一定的参考价值,希望能帮助有需要的小伙伴
    2016-07-07

最新评论