小编Via*_*dko的帖子

如何知道我是否从非阻塞套接字读取了所有内容

我有一个我接受的非阻塞连接套接字:

我有一个非阻塞套接字连接,在收到数据包后,我尝试使用 recv 读取更多数据。

struct sockaddr accepted_address;
socklen_t accepted_address_size = sizeof(accepted_address);

int fd = accept(server_fd, &accepted_address, &accepted_address_size);
make_nonblocking(fd);

... // wait when socket is ready to give me data

char buffer[BUF_SIZE];
int  used = 0;

while (true) {
    int bytes_received = recv(fd, buffer, BUF_SIZE, 0);
    if (bytes_received > 0) { /* OK */ }
    else if (bytes_received < 0) {
        if (errno == EAGAIN || errno == EWOULDBLOCK) {
            /* Should wait for more data, BUT I WILL WAIT INDEFINITELY!!! …
Run Code Online (Sandbox Code Playgroud)

c sockets

0
推荐指数
1
解决办法
71
查看次数

标签 统计

c ×1

sockets ×1