Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760703
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: C/C++

2007-06-09 16:57:37

有时候,需要在recv或者是recvfrom函数调用之前,获取缓冲区内数据的长度。

这个时候,数据已经到达了内核缓冲区,但是还没有到达应用程序的MessageBuf,因此是可以获取数据长度的。

//Get the Length in the socket before use receive_from function
int sock_nread(SOCKET sck)
{
   int ires;
   ulong nread = 0;

 
   fcntl(sock,F_SETFL,O_NONBLOCK));

#ifdef __WIN32
   ires= ioctlsocket ( sck, FIONREAD, &nread );
 #else
   ires = ioctl(sck,FIONREAD,&nread);
 #endif

   if ( ires != 0 )
       return 0;
   return nread;
}
在windows下面可以使用 ioctlsocket ( sck, FIONREAD, &nread )来实现;在Linux下面可以使用ioctl(sck,FIONREAD,&nread)来实现。
阅读(8160) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~