socket在非阻塞的情况下,是否需要这样做呢解决方法

socket在非阻塞的情况下,是否需要这样做呢

char *pbuf;
int nlen;

int ncur=0;
int temp;
while(ncur<nlen)
{
  temp=send(sock,&pbuf[ncur],nlen-cur,0);
  if(temp==SOCKET_ERROR)) break;
}



//////////////////

也就是在非阻塞情况下,发送的数量小于缓冲区的情况下,是否需要保存,在发送呢??




------解决方案--------------------
当然需要了,不能保证发送的数量一定会小于缓冲区
------解决方案--------------------
都行吧
------解决方案--------------------
这类似于大文件的发送,我决定还是要发送ncur与nlen-cur要一致,就是都发送出去,办法就是把
大文件进行拆分,如:
//先发送文件长度
retval=send(m_sock,(char*)&dwLength,4,0)
//然后在拆分发送,fp为文件句柄,当然我这里每次发送100太小了,可以是几十k
while(!feof(fp))
{
memset(buf,0,100);
fread(buf,100,1,fp);
retval=send(m_sock,(char*)buf,100,0);
}

------解决方案--------------------
这是必须要的,你不能保证系统能一次发送发。发送数据一定要保证数据一定发送完,接受数据也必须保证数据必须接受完。