Linux下客户端主动Close,服务端阻塞的read函数不会马上返回
今天在做一个socket通信的时侯,发现close后,阻塞的read函数并没有马上返回,导致后面的时序出现问题,具体情况如下:
服务端与客户端正常建立通信,都采用阻塞模式。当客户端close后,服务端阻塞的read函数并没有马上返回,并且此时在服务端还可以向此连接写入数据,并成功,然后客户端又成功读到数据,接着服务端阻塞的read函数返回<0,表示断开连接。
以上客户端主动Close,服务端阻塞的read函数没有马上返回的现象与理想不符。后查阅,发现windows与linux在这点上不一样,在window是上,closeSocket,阻塞的recv函数会马上返回,但是linux上并不是这样。
为解决这个问题,尝试了如下方法:
1. int shutdown(int sockfd,int how); 此函数可禁止在一个套接口上进行数据的接收与发送。其他博客有说明,在close前调用此函数可以使阻塞的read函数立即返回,但是我每调用此函数机器会重启,这里并不知道具体原因,所以放弃了这个方法。
2. 设置LINGER参数,setsockopt(socket_fd, SOL_SOCKET, SO_LINGER, &so_linger, sizeof so_linger); 将延时参数设置为0,强制关闭套接口;但是结果并不理想,也放弃;
3. 在客户端欲关闭连接之前,先发送一个自定义消息,客户端再close,服务端收到该标志消息后也close,于是正常断开连接;个人觉得,此方法虽然能够解决问题,但总是觉得很牵强。但是最钟还是采用了这种方式。
Linux下客户端主动Close,服务端阻塞的read函数不会马上返回相关推荐
- Linux下yum安装SVN服务端
Linux下yum安装SVN服务端 1.查看yum是否安装 2.安装svn 3.创建目录并配置 4.用户密码passwd配置 5.权限控制authz配置 6.服务svnserve.conf配置 7.启 ...
- ubuntu linux 下建立 纯L2TP 服务端和客户端
以下是从网上摘下,并亲测可行的方法. 一.服务端 使用环境: System: Ubuntu 10.04 Desktop Package:xl2tpd 1. 安装所需软件包. apt-get insta ...
- linux c 客户端与 golang 服务端通信(网络字节序)
网络二进制数据转换: 总所周知,数据在tcp网络传输协议中传输的字节序是大端模式的,换句话说如果你要传输一个int32型的整数,那么假设其二进制小端模式表示为111111111111111100000 ...
- Linux Socket 两个客户端通信,服务端作为中转
Socket 两个客户端通信,服务端作为中转 Socket两个客户端通信,服务端作为中转,通过sockket的通信原理,简单的做了一个以c语言写的服务端,与自己制作的Android app 与树莓派为 ...
- Unity中进行网络通信:三:unity客户端和Unity服务端互相发消息
目录 一.目的 1.想知道:Unity中进行网络通信:unity客户端和Unity服务端互相发消息 二.参考 1.unity3D中使用Socket进行数据通信(三) 三.操作:一:完成:在同一个Uni ...
- 【Linux】ubuntu安装ssh服务端openssh-server
[Linux]ubuntu安装ssh服务端openssh-server 1.背景 2.解决办法 3.测试 1.背景 ubuntu安装后默认只有ssh客户端,只能去连其它ssh服务器: 其它客户端想要连 ...
- linux 怎么配置apache,在Linux下配置Apache Web服务
<在Linux下配置Apache Web服务>由会员分享,可在线阅读,更多相关<在Linux下配置Apache Web服务(10页珍藏版)>请在人人文库网上搜索. 1.在Lin ...
- linux下安装配置redis服务
2019独角兽企业重金招聘Python工程师标准>>> linux下安装配置redis服务 2016年03月25日 15:39:31 coding_everyday 阅读数:3530 ...
- grpc 客户端的context 服务端获取不到_MLamp;DEV[10] | gRPC的应用
上一期和大家谈到了gRPC的快速开始,我么哪知道了gRPC是什么以及怎么快速启动,那么现在,我们来看看这个玩意具体内部是怎么运作的,这里我们同样以helloworld这个为例子来去谈.首先上期内容在这 ...
最新文章
- 一个函数打天下,einsum
- thymeleaf公共页面元素抽取 || 引入片段的时候传入参数
- 利用rfcomm实现树莓派与手机通信_工业物联网 | 怎么用NodeRed实现树莓派与阿里云物联网平台通信?虹科告诉你!...
- 基于 Blazor 开发五子棋小游戏
- java实现飞机大战游戏
- 河南理工大学c语言报告封面,河南理工大学图书信息管理系统设计_纯c语言课程设计.doc...
- mysql主从配置错误_mysql主从配置常见错误处理
- python如何获取javascript动态产生的数据
- eclipse中简便的aptana安装方法
- 2018-2019-1 20165309 《信息安全系统设计基础》第一周学习总结
- IOS判断用邮箱登录验证是不是合法的方法
- matlab密钥生成,使用文件安装密钥安装产品
- 凸优化问题,凸二次规划问题QP,凸函数
- 金融衍生品软件产品设计必备知识——上海黄金交易所产品概览
- 阿里云OSS使用详解(java版本)
- 二叉树的构造(前序+中序)---(后序 + 中序)
- Mybatis教程之Mybatis配置篇
- 可解释性神经网络——1.xNN
- 疫后如何激活消费?上海和阿里打了个样板
- R第七问 R语言常用数学函数