我正在使用伯克利套接字和TCP(SOCK_STREAM套接字)。
过程如下:
- 连接到远程地址。
- 向其发送一条消息。
- 从其收到一条消息。
假设我正在使用以下缓冲区:
char recv_buffer[3000];
recv(socket, recv_buffer, 3000, 0);
问题如下:
- 调用recv第一次后,如何知道读取缓冲区是否为空?如果不为空,则必须再次调用recv,但是如果在缓冲区为空时进行调用,将会阻塞很长时间。
- 如何知道已经读取了多少字节到recv_buffer中?我不能使用strlen,因为我接收到的消息可能包含null字节。
谢谢。
read(2)
手册页与recv(2)
有什么关联性?它们说的话很相似,但引用相关页面会更好。 - Jonathan Lefflerread
与recv
相同,除了recv
允许额外的标志参数。但我编辑了我的答案,使用recv
来避免混淆。 - Charles Salvia