我正在使用Linux机器并使用Java套接字在虚拟环境与SystemC模型之间进行通信。
当使用recv函数接收数据时,我有一个错误报告4:EINTR
我试图增加超时但仍然存在错误。这个信号中断错误还有其他可能的原因吗?
客户端套接字与Jmonkey平台连接以接收视频帧
客户端的套接字如下:
创建套接字并将其连接到
sock = socket(AF_INET, SOCK_STREAM, 0);
if (connect(sock,(const sockaddr*)address,sizeof(ADDR)) < 0){
close(sock);
SOCKERR("failed to connect socket ("<<errno<<")")
return false;
}
int result = setsockopt(sock,IPPROTO_TCP,TCP_NODELAY,(char *) &flag, sizeof(int));
当systemC模型需要视频帧时,它发送请求并使用recv接收数据:
floatStringStream << "x=" << x;
floatStringStream << " y=" << y;
floatStringStream << " th=" << th;
........
char * buf = (char*) malloc((strlength+1)*sizeof(char));
strcpy(buf,str.c_str());
// send string to java
if (!sndPacket((char) 3,buf,strlength)){
SOCKERR("failed to send render request")
return 0;
}
// cleanup
free(buf);
// receive answer
int len = rcvPacket();
在sndPacket()中,我们使用send()将所有参数传递给服务器,最后在rcvPacket()中,我们使用recv接收视频帧。在SystemC模型中,此请求的周期为1ms,但实时不确定,具体取决于模拟速度(通常为几秒)。
在我的系统中,第一帧可以成功传输,但是当它发送第5或第6个请求时,EINTR会到来。中断是否有任何可能的原因?例如,一些其他软件或客户端的一些功能?我不知道服务器端(Jmonkey平台)是什么,所以如果有些专家可以给我一些提示甚至猜测,我会感激不尽。