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.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
根据我所学到的,抽象是一个隐藏内部实现的概念。 在Java中,我们可以通过接口、抽象关键字(类/方法)以及方法来实现抽象。例如扫描器s=新扫描器(System.in);int x=s.nextint();这里我们不需要了解nextInt()方法的任何内容。所以我可以说这是抽象。 同样的事情也可以在C语言中用printf()实现 所以,如果即使在非OOP语言中也能实现抽象,那么为什么在基于OOP的语
前面我们给出了一段完整的C语言代码,就是在显示器上输出“C语言中文网”,如下所示: #include <stdio.h> int main() { puts("C语言中文网"); return 0; } 本节我们就来看看如何通过 Dev C++ 来运行这段代码。 Dev C++ 支持单个源文件的编译,如果你的程序只有一个源文件(初学者基本都是在单个源文件下编写代码),那么不用创建
前面我们给出了一段完整的C语言代码,就是在显示器上输出“C语言中文网”,如下所示: #include <stdio.h> int main(){ puts("C语言中文网"); return 0; } 本节我们就来看看如何通过 VS2015 来运行这段代码。 1) 创建项目(Project)在 VS2015 下开发程序首先要创建项目,不同类型的程序对应不同类型的
主要内容:再谈 if 语句的判断条件在上节《 C语言if else语句》中看到,if 的判断条件中使用了 、 、 等符号,它们专门用在判断条件中,让程序决定下一步的操作,称为 关系运算符(Relational Operators)。 关系运算符在使用时,它的的两边都会有一个表达式,比如变量、数值、加减乘除运算等,关系运算符的作用就是判明这两个表达式的大小关系。注意,是判明大小关系,不是其他关系。 C语言提供了以下关系运算符: 关系运
当从S3下载文件时,它失败了,给了我这个异常 Java语言lang.IllegalState异常:连接池关闭 com.amazonaws.http.conn.Aandler.invoke(Aactory.java:76) 在com.amazonaws.http.conn.AbstractConnProxy70.request(AbstractConnPorg.apache.http.impl.ex