免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: birdielu
打印 上一主题 下一主题

监查连接是否存在 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-05-16 20:45 |只看该作者

监查连接是否存在

对了,对于使用getsockopt() 函数,如果连接存在和断开的返回值是什么?如果
函数错误又会怎么办呢?
谢谢回答

论坛徽章:
0
12 [报告]
发表于 2004-05-17 03:51 |只看该作者

监查连接是否存在

请大家帮我改改,系统是FreeBSD.
  1.       1 #include <sys/types.h>;
  2.        2 #include <sys/socket.h>;
  3.        3 #include <stdio.h>;
  4.        4 #include <fcntl.h>;
  5.        5 #include <unistd.h>;
  6.        6 void get_keepalive(int);
  7.        7 int
  8.        8 main(void)
  9.        9 {
  10.       10    int                sockfd;
  11.       11    const  int                set_opt=1;
  12.       12    int                set_optlen=sizeof(set_opt);
  13.       13    if((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
  14.       14           perror("un create a  socket");
  15.       15           return(1);
  16.       16    }
  17.       17    get_keepalive(sockfd);
  18.       18    if(setsockopt(sockfd,SOL_SOCKET,SO_KEEPALIVE,&set_opt,set_optlen)<0) {
  19.       19          perror("setsockopt error");
  20.       20          exit(1);
  21.       21    }
  22.       22    get_keepalive(sockfd);
  23.       23    return(0);
  24.       24 }
  25.       25 void
  26.       26 get_keepalive(int sockfd)
  27.       27 {
  28.       28    char                 opt;
  29.       29    int                  optlen=sizeof(opt);
  30.       30    if(getsockopt(sockfd,SOL_SOCKET,SO_KEEPALIVE,&opt,&optlen) <0) {
  31.       31           perror("getsockopt error");
  32.       32           return(1);
  33.       33    }
  34.       34    printf(" KEEPALIVE status is  %d\n",opt);
  35.       35    return;
  36.       36 }
  37.       37
复制代码
# # gcc set_SO_KEEPALIVE.c
set_SO_KEEPALIVE.c: In function `get_keepalive':
set_SO_KEEPALIVE.c:32: warning: `return' with a value, in function returning void
#./a.out
KEEPALIVE status is  0
KEEPALIVE status is  8


good sleep!! bye !!

论坛徽章:
0
13 [报告]
发表于 2004-05-17 08:58 |只看该作者

监查连接是否存在

o, my god!
你在错误检测的时候返回值带了数值, 引起了警告.
不过程序还是给我带来了启示,谢谢.
但是没有到检测连接上面呀!

论坛徽章:
0
14 [报告]
发表于 2004-05-17 10:26 |只看该作者

监查连接是否存在

我觉得要真正的检测连接,还是要往socket里面写东西,至于怎么写什么可以通过自身的协议来协调,比如隔一段时间就来写一个信息,如果对方在受到特定的电文的时候可以丢弃电文,或者发一个相应的信息,就象我们用open函数打开一个文件来产生一个文件描述符一样的,你如果想判断着个文件描述符时候已经关闭一样的。

论坛徽章:
0
15 [报告]
发表于 2004-05-17 10:27 |只看该作者

监查连接是否存在

这方面的开发我们曾经做过很多次,无一例外都是通过发消息来实现。关键是我们对通信协议的控制。

论坛徽章:
0
16 [报告]
发表于 2004-05-17 10:36 |只看该作者

监查连接是否存在

问题现在是在给定的协议下我们进行开发, 而且我们必需不能向客户端发送无用的信息.
也就是说客户端对连接是否存在的检测是透明的, 它不能参与进去.

论坛徽章:
0
17 [报告]
发表于 2004-05-17 14:27 |只看该作者

监查连接是否存在

我尝试过使用getsockopt()函数, 但是没有成功, 也就是说, 如果由另一方断开了, 它还是检测不到的.
另外我也对select() 函数进行了测试, 同样也得不到正确的结果, 使用select()的时候我是通过第三个例外状况参数进行检测的, 但是得不到结果.
现在, 只有迷惑.......又不能用写的方式进行检测,怎么办?

论坛徽章:
0
18 [报告]
发表于 2004-05-17 15:17 |只看该作者

监查连接是否存在

一个很奇怪的问题,就是你监察连接存在的目的是什么?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
19 [报告]
发表于 2004-05-17 15:24 |只看该作者

监查连接是否存在

read 一下就知道了。
如果 read 返回 0,那么就表示对方已经断开。

论坛徽章:
0
20 [报告]
发表于 2004-05-17 16:49 |只看该作者

监查连接是否存在

read也不行,如果客户端send消息以后马上执行close操作,服务端同样可以收到消息。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP