我正在尝试设置超时以通过套接字接收数据。
struct timeval
{
time_t tv_sec;
long int tv_usec;
};
struct timeval tv;
tv.tv_sec = 5;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1)
{
sprintf(RESULTS, "%s","ERROR");
return 0;
}
else
{
/*Connecting to server socket*/
if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) != 0)
{
/*Writing results back to COBOL variable*/
sprintf(RESULTS, "%s","!SENT");
return 0;
}
else
{
if(setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,&tv,sizeof(tv)) < 0)
{
if(send(sockfd, buff, sizeof(buff), 0)<0)
{
/*Writing results back to COBOL variable*/
sprintf(RESULTS, "%s","ERROR");
/*Closing the socket*/
FILE_CLOSE_((short)sockfd);
return 0;
}
else
{
/* Receiving data from server*/
bzero(buff, sizeof(buff));
recv(sockfd, buff, sizeof(buff),0);
/*Writing results back to COBOL variable*/
sprintf(RESULTS, "%s","SUCCESS");
/*Closing the socket*/
FILE_CLOSE_((short)sockfd);
return 0;
}
}
}
}
预期输出:程序应该等待 5 秒,如果它没有得到服务器的回复,那么它应该关闭套接字并退出它。
实际输出:警告:参数 4 与正式定义冲突
基于这个例子实现,我在C中找到了一个例子
但这不适用于 Tandem-C
我已经参考了 Tandem 的 C/C++ 编程手册,但没有发现超时。串联手册- 第 185 页
提前致谢。