1

ソケット経由でデータを受信するためのタイムアウトを設定しようとしています。

 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ページ

前もって感謝します。

4

2 に答える 2