社区
通信技术
帖子详情
请教面向连接的socket问题
horsehorse
2001-11-05 11:30:16
加精
面向连接的socket通讯时,如果一方突然掉电,来不及通知另一方,对方怎么知道此socket已经无效?
...全文
144
13
打赏
收藏
请教面向连接的socket问题
面向连接的socket通讯时,如果一方突然掉电,来不及通知另一方,对方怎么知道此socket已经无效?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
copy_paste
2001-12-09
打赏
举报
回复
听听
horsehorse
2001-11-07
打赏
举报
回复
算了,我看还是自己发心跳消息吧。
wwwunix
2001-11-06
打赏
举报
回复
另:保活分节的时间间隔一般为2小时,不过这个时间可以改变。
wwwunix
2001-11-06
打赏
举报
回复
select( 0, &readSocketSet, NULL, &errSocketSet, &timeout );
的第一个参数为测试的描述字的个数,它的值是要被测的最大描述字加一。
horsehorse
2001-11-06
打赏
举报
回复
设置SO_KEEPALIVE的代码如lurenfu所说,select检测的代码如下:
struct timeval timeout = { 0, 0 };
fd_set readSocketSet;
fd_set errSocketSet;
FD_ZERO( &readSocketSet );
FD_SET( hSocket, &readSocketSet );
FD_ZERO( &errSocketSet );
FD_SET( hSocket, &errSocketSet );
iRet = ::select( 0, &readSocketSet, NULL, &errSocketSet, &timeout );
关机后iRet的返回值还是0,即没有错误。
不知各位还有什么好方法?分不够可以再加,加个0都没有关系。
wwwunix
2001-11-06
打赏
举报
回复
在unix下修改内核参数:tcp_keepidle.
修改这个参数会影响所有用到保活分节的程序。
horsehorse
2001-11-06
打赏
举报
回复
听听课也是好的,请问能不能介绍一下UNIX下的设置?
wwwunix
2001-11-06
打赏
举报
回复
1、哦
2、我知道unix下的设置,windows下我不太清楚。:-(
horsehorse
2001-11-06
打赏
举报
回复
感谢木易兄的热心解答!
在MSDN中对select的第一个参数有如下解释:
nfds
[in] Ignored. The nfds parameter is included only for compatibility with Berkeley sockets.
似乎在Windows环境下设为什么值都可以。
另外“保活分节的时间间隔一般为2小时,不过这个时间可以改变”,不知应该如何设置?
wwwunix
2001-11-05
打赏
举报
回复
1、向掉电的一方发送数据时,可以检测出socket无效。
2、使用SO_KEEPALIVE套接口选项,也可以检测出socket无效。
lurenfu
2001-11-05
打赏
举报
回复
int sockfd, opt, len;
sockfd = socket( PF_INET, SOCK_STREAM, 0 );
opt = 0;
len = sizeof(opt);
setsockopt( sockfd, SOL_SOCKET, SO_KEEPALIVE, &opt, (socklen_t *)&len );
然后填充FD_SET的读和异常,用select读,出错异常会返回。
wwwunix
2001-11-05
打赏
举报
回复
设置SO_KEEPALIVE选项,然后用select读,则返回错误。
horsehorse
2001-11-05
打赏
举报
回复
请问如何使用SO_KEEPALIVE套接口选项?能否具体一点?多谢!
Java自学之路——(精华版)
Java自学之路——(精华版)
java语言复习药店
该资源我用过,概括了java的知识,获得方式是老师的总结,
多网卡
socket
的bind
问题
多网卡
socket
的bind
问题
Python学习_27
Socket
(一)
Python学习_27
Socket
(一)1、
socket
简介
socket
又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求,使主机或者一台计算机上的进程可以通讯2、TCP简介Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Inte...
异步
Socket
接收数据后缓存处理
问题
异步接收数据都正常,是个定长TLV包,但是接收到后都是直接写入bufflist后再getdata出来处理,发现有时会有掉包情况,以为是线程安全
问题
,后来加入了lock段将bufflist内代码锁住,依然会有掉包现象,导致组包失败,
请教
了一些人,回答仍然是线程安全
问题
,请问是否有更好的处理办法,如有请贴出代码,因为理论我都明白,也不是解包
问题
(这个解包方式只是随便写的简单方式)现需要能实际解决缓存数
通信技术
4,387
社区成员
28,918
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章