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

0

看起来它是一个特殊的问题。

由于某些历史原因, sockelen_t 被定义为 palin int。但是 sizeof 返回一个未分配的 int。您需要定义一个 socklen 变量并将其设置为 sizeof 值。

就像是:

socklen_t sl;
sl = (int) sizeof(timeout);
于 2021-11-12T15:08:46.903 回答
-1
        qcap = socket(AF_INET , SOCK_STREAM , 0);
        int timeout = 1798;
        setsockopt(qcap, 6, 18, (char*)&timeout, sizeof(timeout));
        connect(qcap, (sockaddr *)&server_bn, sizeof(server_bn));

https://github.com/alexeyneu/BlockZero/blob/29ed505a211d14d4577012438cd8bec9d15f1272/connection/x.cpp#L93-L96

于 2021-11-11T13:44:52.807 回答