我有一个套接字,等待接收数据后将其发送进行处理。然后它再次等待接收,但这次它没有收到任何数据,返回-1,并且打印错误号时会显示35(即EAGAIN
)。
这只会在MAC OS Lion操作系统上发生,其他操作系统都可以正常运行。
do{
rc = recv(i, buffer, sizeof(buffer), 0);
if (rc < 0){
printf("err code %d", errno);
}
if(rc == 0){
//Code for processing the data in buffer
break;
}
....
}while(1);
编辑:更正了缩进和errno
(Translated)
EAGAIN
,但在每个操作系统上都不一定相同。但是,这些名称(大体上)在各个操作系统中具有相同的含义。通过提供错误的名称,您将使一些没有访问MacOS系统的人能够帮助您,以便他们可以自己找出答案。 - Celadarecv()
之前,在套接字文件描述符上进行select()
调用如何? - AsblarfEDEADLK
吗?在我的MacOS系统中,/usr/include/sys/errno.h
中将EAGAIN
定义为35。 - Celada