ソケット経由でデータを受信するためのタイムアウトを設定しようとしています。
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ページ
前もって感謝します。