社区
网络编程
帖子详情
socket编程
gongluyang
2005-09-13 01:37:03
我现在有一个写了一个socket程序查找local网的的机器, 客户端在socket bind以后,做一个select和recvfrom的循环,然后,我有时候能得到正确的机器列表,有时候就得不到,错误信息从select显示超时,就算我把select时间限制设大也不能解决这个问题?请问列位有谁知道select超时还有什么原因吗?比如socket堵塞,希望大侠帮忙!
...全文
103
5
打赏
收藏
socket编程
我现在有一个写了一个socket程序查找local网的的机器, 客户端在socket bind以后,做一个select和recvfrom的循环,然后,我有时候能得到正确的机器列表,有时候就得不到,错误信息从select显示超时,就算我把select时间限制设大也不能解决这个问题?请问列位有谁知道select超时还有什么原因吗?比如socket堵塞,希望大侠帮忙!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gongluyang
2005-09-14
打赏
举报
回复
按时到达是什么概念?服务端的sendto都是succeed的, 我这边客户端用的是广播的形式,同时接收多个服务端发来的信息,会不会影响?
nuaawenlin
2005-09-13
打赏
举报
回复
那要首先保证你的数据已经按时到达了客户端才好分析是什么造成错误
如果数据没有按时到达,那肯定会超时返回
gongluyang
2005-09-13
打赏
举报
回复
哪位大仙知道吗?
gongluyang
2005-09-13
打赏
举报
回复
部分代码如下:
if ( ( soc = socket(AF_INET, SOCK_DGRAM, 0) ) <0 )
{
PRINTF(info_debug, ("create broadcast socket err\n"));
return PCCLIENT_SOCKET_ERROR;
}
//C( soc != ERROR, PCCLIENT_SOCKET_ERROR );
sFd = soc;
if (setsockopt (sFd, SOL_SOCKET, SO_RCVBUF, (char *)&optval, sizeof(optval)) < 1) {
PRINTF(info_debug, ("setsockopt failed, errno=%d\n", errno));
}
/* bind socket to local address */
if ( (sts = bind( sFd, (struct sockaddr *) &recAddr, sockAddrSize ) ) < 0 )
{
PRINTF(info_debug, ("bind err %d\n",sts));
return PCCLIENT_BIND_ERROR;
}
//C( sts != ERROR, PCCLIENT_BIND_ERROR );
startTime = time( NULL );
do {
FD_ZERO( &set );
FD_SET( sFd, &set );
tim.tv_sec = SELECT_NETWORK_TIMEOUT_SECS;// 1 second
tim.tv_usec = 0;
memset(pContext->SimpleBuffer, 0, PKTSIZE);
sts = select(FD_SETSIZE, &set, NULL, NULL, &tim);
PRINTF(info_debug, ("select return %d\n", sts));
C( sts != ERROR, PCCLIENT_SELECT_ERROR );
if ( sts != 0 ) {
sts = recvfrom( sFd, (char *)(pContext->SimpleBuffer), PKTSIZE, 0,
(struct sockaddr *)&sendAddr, &sockAddrSize );
C( sts != ERROR, PCCLIENT_RECVFROM_ERROR );
PRINTF(info_debug, ( "recieved %s and %s\n", pContext->SimpleBuffer, & (pContext->SimpleBuffer[100]) ));
pcclientAddToServerList( pContext, pContext->SimpleBuffer, &(pContext->SimpleBuffer[100]) );
} else {
// printf(" Select Timeout for RecvFrom...\n");
}
} while ( time(NULL) - startTime < PING_RESPONSE_DURATION_SECS ); // three second
alen_ghl
2005-09-13
打赏
举报
回复
也想知道
顶
socket编程
实验报告1
2.服务器只是一个py文件,稳定性还不够,可以给服务器配置数据库和本地文件来增加稳定性 3.服务器可能遭受各种攻击,可以给服务器增加一些安全和防御模块 4.服务
Socket编程
实例
C#_SOCKET编写的简单聊天通信程序(客户端+服务端)
Socket编程
系列之7:RCF远程调用框架编程实战
-------------------------------------------------------注意,本系列
Socket编程
系列初步计划包括如下课程:
Socket编程
系列之1:Linux-API网络编程入门实战
Socket编程
系列之2:Windows-API网络编程入门实战Socket...
Socket编程
socket编程
,欢迎大家来学习
Socket编程
面试题
Socket编程
面试题
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章