socket的shutdown与close

shutdown原型

int shutdown(int socket, int how);

socket 指定socket的文件描述符

how    指定shutdown的类型

SHUT_RD

禁止读操作

SHUT_WR

禁止写操作

SHUT_RDWR

禁止读和写

close原型

int close(int fd);

close是内核函数,关闭进程占有的文件句柄,内核中的每一个文件句柄都有一个引用计数,每个打开该文件句柄的进程都将计数+1,每次调用close会将进程占有的文件描述符关闭,同时内核中的引用计数-1.

区别

shutdown直接作用于socket连接,调用shutdown以后,所有关联该socket连接的文件描述符均被影响(不能读或者写,或者均不能),即影响是跨进程的,shutdown不会关闭socket,socket会在关联的文件描述符内核计数为0时被动关闭。

close作用于进程打开的文件描述符,close以后进程将不能够访问该socket,该socket连接会在引用计数变为0时被动关闭,假如多个进程访问同一个socket的文件描述符,其中一个进程调用close(sockfd)其他进程可以继续进行socket通信。

时间: 2024-10-03 09:46:57

socket的shutdown与close的相关文章

Socket之shutdown()用法

通常来说,socket是双向的,即数据是双向通信的.但有些时候,你会想在socket上实现单向的socket,即数据往一个方向传输. 单向的socket便称为半开放Socket.要实现半开放式,需要用到shutdown()函数. 一般来说,半开放socket适用于以下场合: (1)当你想要确保所有写好的数据已经发送成功时.如果在发送数据的过程中,网络意外断开或者出现异常,系统不一定会返回异常,这是你可能以为对端已经接收到数据了.这时需要用shutdown()来确定数据是否发送成功,因为调用shu

close vs shutdown socket

http://stackoverflow.com/questions/4160347/close-vs-shutdown-socket 从网上的资料看总结一下几点: 1.shutdown会发FIN  完成4步挥手,close 发RST.由此可见一个温柔一个粗鲁. 2.shutdown单项关闭.不影响另一方向的读写.是否本方向也还能读写?? shutdown is a flexible way to block communication in one or both directions. Wh

C# Socket编程 同步以及异步通信

套接字简介:套接字最早是Unix的,window是借鉴过来的.TCP/IP协议族提供三种套接字:流式.数据报式.原始套接字.其中原始套接字允许对底层协议直接访问,一般用于检验新协议或者新设备问题,很少使用. 套接字编程原理:延续文件作用思想,打开-读写-关闭的模式. C/S编程模式如下: Ø  服务器端: 打开通信通道,告诉本地机器,愿意在该通道上接受客户请求——监听,等待客户请求——接受请求,创建专用链接进行读写——处理完毕,关闭专用链接——关闭通信通道(当然其中监听到关闭专用链接可以重复循环

asp.net中Web使用Socket

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Threading; using System.Net; using System.Net.Sockets; using System.Text; namespace WebSocket { pu

C# Socket 简易的图片传输

关于网络的数据传输我就是个小白,所以今天学习一下简易的Socket图片传输. 客户端和服务器的连接咱们上次已经学过了,咱们先从简易的文件传输入手.下面开始代码分析了. Server.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Imaging; using Sy

[转载]C# Socket编程 同步以及异步通信

原文地址:C# Socket编程 同步以及异步通信     作者:  BLoodMaster 套接字简介:套接字最早是Unix的,window是借鉴过来的.TCP/IP协议族提供三种套接字:流式.数据报式.原始套接字.其中原始套接字允许对底层协议直接访问,一般用于检验新协议或者新设备问题,很少使用. 套接字编程原理:延续文件作用思想,打开-读写-关闭的模式. C/S编程模式如下: 服务器端: 打开通信通道,告诉本地机器,愿意在该通道上接受客户请求——监听,等待客户请求——接受请求,创建专用链接进

Socket 异步通信示例

这个项目是一个控制台应用程序: 服务器端: using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; // State object for reading client data asynchronously public class StateObject { // Client socket. public Socket workSocket =

【socket】Socket的三个功能类TCPClient、TCPListener 和 UDPClient

Socket的三个功能类TCPClient.TCPListener 和 UDPClient (转) 应用程序可以通过 TCPClient.TCPListener 和 UDPClient 类使用传输控制协议 (TCP) 和用户数据文报协议 (UDP) 服务.这些协议类建立在 System.Net.Sockets.Socket 类的基础之上,负责数据传送的细节.(也就是说TCPClient.TCPListener 和 UDPClient 类是用来简化Socket) TcpClient 和 TcpLi

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的读写功能. 成功则返回0,错误返回-1,错误码errno:EBADF表示sockf