- 论坛徽章:
- 0
|
20可用积分
同步长连接主函数
void *client_proc(void *args)
{
CONNECT:
/*检测Socket是否可用*/
ilRn=socket_stat( sockfd , 0 );
if (ilRn != 0){
close(sockfd);
etsDebug(0,"与二级[%s:%d]建立连接状态不正常sockfd[%d]",aYLip,iYLport,sockfd);
slTermbuf.flag = 99;
goto CONNECT;
/*2007-11-14 9:35增加发送超时判断*/
rwto.tv_sec = 7;
rwto.tv_usec= 0;
ilRn = setsockopt(sockfd,SOL_SOCKET,SO_SNDTIMEO,&rwto,sizeof(rwto));
if ( ilRn < 0 )
etsDebug(0,"设置发送超时时间 setsockopt SO_SNDTIMEO error,ilRn=%d ,errno[%d]",ilRn,errno);
/*2007-11-14 9:35增加发送超时判断*/
etsDebug(0,"与二级[%s:%d]建立连接状态正常sockfd[%d],开始发送长度为[%d]的报文",aYLip,iYLport,sockfd,ilMsglen);
ilRn = etsTcpsnd(sockfd, alMsgbuf, ilMsglen);
if (ilRn == 0)
{
etsDebug(0,"调用函数etsTcpSnd [%d] len [%d] 向二级发送通讯回执成功 IP=[%]",sockfd,ilMsglen,aYLip);
ilMsglen=0; /*此处赋值为0目的不重复发送*/
}
else {
/*通讯失败处理*/
close(sockfd);
slTermbuf.flag = 99; /*通讯失败*/
if (slTermbuf.flag == 0)
etsDebug(0,"调用函数etsTcpSnd port[%d] len [%d] 向二级发送通讯回执失败 rc[%d] IP=,sockfd,ilMsglen,ilRn,aYLip);
goto CONNECT;
}
}
/****************************************************************/
/* 函数编号 :etsTcpsnd */
/* 函数名称 :发送报文到通讯端口 */
/* 作 者 :PC */
/* 建立日期 :2007/10/11 */
/* 最后修改日期:2007/10/11 */
/* 函数用途 : */
/* 函数返回值 : 成功: 0 */
/* 失败: -1 */
/****************************************************************/
int etsTcpsnd(int sockfd, char *buffer, int length)
{
int len;
int totalcnt;
totalcnt = 0;
while(totalcnt < length)
{
len = write(sockfd, buffer + totalcnt, length - totalcnt);
if (len < 0)
{
if (errno==EINTR)
{
len = 0;
break;
}
else
return (-1);
}
else if (len == 0)
break;
totalcnt = totalcnt + len;
}
if(totalcnt == length)
return(0);
else
return(-1);
}
错误提示
============================================================================
11-15 20:05:27:773 pid[3953]: 接收二级报文成功 IP=[172.17.72.11] socket=[4]len[18]alMsgbuf=[40120854000005麛.]
11-15 20:05:27:773 pid[3953]: 向数据库操作进程发送成功 q_reqid=[2]内容=[40120854000005麛.]
11-15 20:05:27:773 pid[3953]: 从数据库操作进程读消息成功,q_respid=[3]slTermbuf.data=[40120854000005麛.] len[18]
11-15 20:05:27:773 pid[3953]: 与二级[172.17.72.11:2001]建立连接状态正常sockfd[5],开始发送长度为[18]的报文
============================================================================
发送超时已经加了 为什么还会死在etsTcpsnd函数这里?(unix系统)
[ 本帖最后由 lcq6075217 于 2007-11-19 20:26 编辑 ] |
|