首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟我设置的发送超时如何没有效果啊

2012-09-14 
我设置的发送超时怎么没有效果啊?最近要在linux平台下写一个数据补传的程序,我在程序里设了发送超时3秒钟

我设置的发送超时怎么没有效果啊?
最近要在linux平台下写一个数据补传的程序,我在程序里设了发送超时3秒钟看数据有没有传送成功。程序运行时,我把网线拔了,怎么send过了将近一分钟才失败?另外我设置socket的阻塞模式,默认应该是阻塞的吧?

下面是我程序中设置超时的部分代码。(有些变量定义我就省略了)

  struct timeval TimeOut = { 3, 0 };
  int sock;
  if((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
  {
  printf("Failed to create socket!\n");
  PRINT_LOG("Failed to create socket!\n");
  result = -1;
  goto _end;
  }
  setsockopt( sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&TimeOut, sizeof(TimeOut) ); //设发送超时

  bzero(&Server, sizeof(Server));
  Server.sin_family = AF_INET;
  Server.sin_addr.s_addr = inet_addr(CDMA_ROUTER);
  Server.sin_port = htons(PORT);
  if(connect(sock, (struct sockaddr*)&Server, sizeof(Server)) < 0)
  {
  printf("Failed to connect with CDMA_ROUTER!\n");
  PRINT_LOG("Failed to connect with CDMA_ROUTER!\n");
  fclose( fp );
  fclose( fpTemp );
  fclose( fpLog );
  close( sock );
  result = -1;
  goto _end;
  }

  while( 1 )
  {
  if(send(sock, rbuf1, numSend, 0) != numSend) //发送失败 
  {  
  close( sock );
  result = -1;
  goto _end;
  }
  }
 

[解决办法]
你把这句
setsockopt( sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&TimeOut, sizeof(TimeOut) ); 
的返回值保存打印下,看执行成功了没,还有,超时不都是毫秒么,你的struct timeval TimeOut = { 3, 0 };是什么意思?
[解决办法]

C/C++ code
int TimeOut = 15000;            if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&TimeOut, sizeof(TimeOut))
[解决办法]
通常使用select来设置超时,而不是依赖于描述符的选项,移植性也好

热点排行