我用来select()
从标准输入接收数据。
代码在这里:
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
int main()
{
fd_set rfds;
struct timeval tv;
int retval;
char buf[100];
FD_ZERO(&rfds);
FD_SET(STDIN_FILENO, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1,&rfds,0,0,&tv);
if( retval == -1)
perror("select reset\n");
else if(retval == 0)
printf("timeout\n");
else
{
printf("data available\n");
if(FD_ISSET(STDIN_FILENO, &rfds))
{
//int ret = recv(STDIN_FILENO, buf, sizeof(buf), 0); // ret get -1.
int ret = read(STDIN_FILENO, buf, sizeof(buf)); // ret get correct data.
printf("buf: %s ret: %d\n", buf,ret);
}
}
return 0;
}
在这段代码中,recv()
总是会返回-1
,但read()
可以得到正确的数据。
我发现这read()
相当于recv()
使用flags
. 0
那么为什么我的代码中的行为recv()
和read()
不一样呢?