【发布时间】:2011-05-20 17:41:25
【问题描述】:
我正在使用 berkeley 套接字和 TCP(SOCK_STREAM 套接字)。
流程是:
- 我连接到远程地址。
- 我向它发送消息。
- 我收到了一条消息。
假设我正在使用以下缓冲区:
char recv_buffer[3000];
recv(socket, recv_buffer, 3000, 0);
问题是:
- 我如何知道第一次调用 recv 后读取缓冲区是否为空?如果它不为空,我将不得不再次调用 recv,但如果我在它为空时这样做,我会让它阻塞很长时间。
- 如何知道我读入了recv_buffer 的字节数?我无法使用 strlen,因为我收到的消息可能包含空字节。
谢谢。
【问题讨论】:
标签: c++ c sockets timeout berkeley-sockets