程序是linux下的。这里人气旺,大家讨论一下。问题主要是在连接服务器端的时候,如果刚好网络断了一下,(大约2-3秒)
就象ping的时候显示time out,也许也不是这个问题,我的程序就无法连接
上服务器端。在网络通畅的情况下,工作一切正常,包括在ping的时候返回
的时间为100到200毫秒的128Kbps的慢速网上,也正常。程序的代码如下:
程序的作用是将报文发送到不同的服务器端,因为不能耽误报文的实效性,而我
网络发送程序又没有使用多线程,只能使用非阻塞方式的套接字。平时报文的数
据量不大,但是有突发数据。
//.....
while(1)
{
//一些处理,取报文等操作,停顿(usleep)500毫秒
ret=client.Connect(msg_tmp.des_addr,TCP_PORT);//client是自定义socket类
      //connect是类成员
if(ret==0)//连接成功
{
//发送数据
}
else//不成功
{
if((ret==-1)&&(errno==EINPROGRESS))
{
//返回大循环,-1为自定义类的connect返回值
//EINPROGRESS,linux下连接的错误号,
//应该是连接正在进行中,非阻塞方式下帮助你
//判断的一个重要条件
}
else
{
//该服务器连接不上,报文作其它处理
}
}}类的一部分函数实现CSocket::CSocket(int dom,int type,int protocol=0):domain(dom),socket_type(type)
{
  re_use_addr=1;//可重复绑定标志
  domain=dom;//域
  socket_type=type;//套接字类型
  socket_fd=socket(domain,socket_type,protocol);//调用系统函数
   //perror("socket");
}int CSocket::Connect(char *server_address,int port)
{
  int ret;
  bzero(&server_addr,sizeof(struct sockaddr_in));//server_addr,类成员变量
  server_addr.sin_family=domain;
  server_addr.sin_port=htons(port);
  inet_aton(server_address,&server_addr.sin_addr);
  ret=::connect(socket_fd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));
//调用系统函数返回
  if (ret<0)
  //perror("Connect");
  return ret;
}各位同志看看程序有什么问题