socket编程

gongluyang 2005-09-13 01:37:03
我现在有一个写了一个socket程序查找local网的的机器, 客户端在socket bind以后,做一个select和recvfrom的循环,然后,我有时候能得到正确的机器列表,有时候就得不到,错误信息从select显示超时,就算我把select时间限制设大也不能解决这个问题?请问列位有谁知道select超时还有什么原因吗?比如socket堵塞,希望大侠帮忙!
...全文
82 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
也想知道
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-09-13 01:37
社区公告
暂无公告