How to connect windows socket library to my code

Dear all,

I am working on implementation of real data exchange between fortran and python. To do this the TCP socket function can be used. I know, there are other better options to implement a data exchange, but still I would like to try this one.

I have found en example, how it can be done.But, I can not compile the code. I get the error:

Fatal Error: Cannot open module file ‘ws2_32.mod’ for reading at (1): No such file or directory

I guess, I have to connect windows socket library to my code. But, I do not know, how to do this. I am new to Fortran and programming is not my main working area.

I work on Windows 10, 64-Bit. IDEs: Geany

Could you please help me and explain in details, how this problem can be solved?

Many thanks in Advance!

In addition the part of code, which can not be compiled, you can finde below. If you need more information, please let me know.

!------------------------------------------------------
! SETUP CONNECTION FUNCTION
!------------------------------------------------------
 FUNCTION SETUP_CONNECTION()
    !USE WINSOCKET LIBRARY
    USE WS2_32

    !FUNCTION TYPE
    INTEGER :: SETUP_CONNECTION

    !CONNECTION PARAMTERS
    CHARACTER*15, PARAMETER :: IP_ADDRESS = ’134.147.101.20’
    INTEGER*2, PARAMETER :: PORT = 1234

    !DECLARE WINSOCKET VARIABLES
    INTEGER STATUS_INITIALISE_WINSOCK
    INTEGER STATUS_CONNECT_SOCKET
    INTEGER :: TCP_SOCKET

    INTEGER, PARAMETER :: WINSOCK_VERSION = X’202’
    INTEGER SOCKADDR_SIZE

    TYPE(T_WSADATA) WSAINFO
    TYPE(T_SOCKADDR_IN) SOCKADDR

    !INITIALISE WINSOCKET
    STATUS_INIITIALISE_WINSOCK = WSASTARTUP(WINSOCK_VERSION, WSAINFO)

    IF (STATUS_INITIALISE_WINSOCK .EQ. 0) THEN
        WRITE(*,*) "INITIALISING WINSOCK SUCCESSFUL"
    ELSE
        WRITE(*,*) "ERROR: INITIALISING WINSOCK UNSUCCESSFUL" 
    END IF

    ! CREATE SOCKET
    ! AF_INET = IPv4 address Family
    ! SOCK_STREAM = two-way connection-based byte stream
    ! IPPROTO_TCP = TCP-Protocol

    TCP_SOCKET = SOCKET(AF_INET, SOCK_STREAM, IPPROTO_TCP)

    IF (TCP_SOCKET .EQ. INVALID_SOCKET) THEN
        WRITE(*,*) "ERROR: SOCKET OBJECT COULD NOT BE CREATED"
        SETUP_CONNECTION = -1
    END IF

    !CONNECT TO SERVER

    SOCKADDR%SIN_FAMILY = AF_INET
    SOCKADDR%SIN_PORT = HTONS(PORT)
    SOCKADDR%SIN_ADDR%S_ADDR = INET_ADDR(IP_ADDRESS(1:LEN_TRIM(IP_ADDRESS)))

    SOCKADDR_SIZE = SIZEOF(SOCKADDR)

    STATUS_CONNECT_SOCKET = CONNECT(TCP_SOCKET, %REF(SOCKADDR), SOCKADDR_SIZE)

    IF (STATUS_CONNECT_SOCKET .EQ. 0) THEN

        WRITE(*,*) "CONNECTION TO SERVER ESTABLISHED"
    ELSE
        WRITE(*,*) "ERROR: CONNECTION TO SERVER COULD NOT BE ESTABLISHED"
        WRITE(*,*) "ERRORCODE: ", WSAGetLastError()
        SETUP_CONNECTION = -1
    END IF

    SETUP_CONNECTION = TCP_SOCKET

    RETURN
END FUNCTION

Hi @yurii1, welcome to the Discourse! :slight_smile:

I believe that the WS2_32 module is only provided by the Intel Fortran compiler as part of it’s Windows interface modules. So you’ll need to compile your code using the Intel Fortran compiler which is freely available as part of the oneAPI HPC toolkit.