1

我正在实现 recvall() 函数以确保数据已完全发送。我也将 send() 函数修改为 sendall() ,如下所示:

int sendall (int consocket, char* buf, int* len)
{
    int total = 0;
    int bytesleft = *len; // how many we have left to send
    int n;
    while(total < *len) {
        n = send(consocket, buf+total, bytesleft, 0);
        if (n == -1) { break; }
        total += n;
        bytesleft -= n;
        *len = total; // return number actually sent here
        return n==-1?-1:0; // return -1 on failure, 0 on success
    }
}

如何实现 recvall()?假设我从服务器发送了一个 14 字节的结构,然后我签入客户端并获取 12 个字节。现在在不可靠的情况下,我应该如何设法获取另外两个字节...我已经花时间尝试...任何欢迎帮助。

4

1 回答 1

0

select您可以使用适当的 timeout循环 a 。Select 将等待直到接收到新数据或等待时间过去或发生错误。这给你一个比仅仅在recv上阻塞更大的控制权。

于 2013-10-18T07:34:58.777 回答