在 Fortran 和 WS2_32 中为 Socket 设置超时

Set Timeout for Socket in Fortran and WS2_32

提问人:why.n0t 提问时间:9/22/2023 最后编辑:Ian Bushwhy.n0t 更新时间:9/22/2023 访问量:45

问:

我在 Fortran (ifort) 中有一个客户端,它连接到套接字,发送一些数据并接收一些数据。 因为有时连接的服务器可能会停止或终止,所以我不想无限期地等待响应,并在接收端设置超时并在我这边处理问题。

我对服务器没有任何控制权。通信被阻塞,没有线程或任何东西。

我使用“WS2_32”进行套接字/连接处理,通信工作正常。问题在于设置超时。

我正在尝试使用“setsockopt”来设置超时

         ...
         status = WSAStartup(WINSOCK_V2_2, wsaInfo)
         ...
         connection = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
         ...

         status = setsockopt(connection,SOL_SOCKET,
     +                          SO_RCVTIMEO,Timeout,
     +                          sizeof(Timeout))

         ...
          status = connect(connection,
     +                       %REF(connectionInfo),
     +                       SIZEOF(connectionInfo))

因为我尝试了不同的事情。使用 Integer(4) 或 Integer(DWORD) 不会编译。使用 Character(4) 进行编译,status 返回 0(成功),但我没有得到任何超时。Timeout

我尝试使用非常小的值或 ,这应该是毫秒。但它总是无限期地等待。10'10'

Windows 套接字 intel-fortran

评论

1赞 Vladimir F Героям слава 9/22/2023
它使用什么样的接口?它是由英特尔提供的吗?
0赞 why.n0t 9/22/2023
我是这样活着的。我在子例程的开头声明“use ws2_32”。英特尔提供接口说明。

答: 暂无答案