18 USE iso_c_binding,
ONLY: c_char,&
24 #include "./base/base_uses.f90"
29 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'sockets_interface'
37 MODULE PROCEDURE writebuffer_s, &
38 writebuffer_d, writebuffer_dv, &
44 MODULE PROCEDURE readbuffer_s, &
45 readbuffer_dv, readbuffer_d, &
51 SUBROUTINE uwait(sec)
BIND(C, NAME="uwait")
52 USE iso_c_binding,
ONLY: c_double
61 INTEGER(KIND=C_INT) :: psockfd, inet, port
62 CHARACTER(KIND=C_CHAR),
DIMENSION(*) :: host
68 INTEGER(KIND=C_INT) :: psockfd, inet, port
69 CHARACTER(KIND=C_CHAR),
DIMENSION(*) :: host
75 INTEGER(KIND=C_INT) :: psockfd, backlog
81 INTEGER(KIND=C_INT) :: psockfd, pclientfd
87 INTEGER(KIND=C_INT) :: psockfd
93 CHARACTER(KIND=C_CHAR),
DIMENSION(*) :: host
97 SUBROUTINE writebuffer_csocket(psockfd, pdata, plen)
BIND(C, name="writebuffer")
99 INTEGER(KIND=C_INT) :: psockfd
100 TYPE(C_PTR),
VALUE :: pdata
101 INTEGER(KIND=C_INT) :: plen
103 END SUBROUTINE writebuffer_csocket
105 SUBROUTINE readbuffer_csocket(psockfd, pdata, plen)
BIND(C, name="readbuffer")
107 INTEGER(KIND=C_INT) :: psockfd
108 TYPE(C_PTR),
VALUE :: pdata
109 INTEGER(KIND=C_INT) :: plen
111 END SUBROUTINE readbuffer_csocket
123 SUBROUTINE writebuffer_d(psockfd, fdata)
124 INTEGER,
INTENT(IN) :: psockfd
125 REAL(KIND=
dp),
INTENT(IN) :: fdata
127 CHARACTER(len=*),
PARAMETER :: routineN =
'writebuffer_d'
130 REAL(KIND=c_double),
TARGET :: cdata
132 CALL timeset(routinen, handle)
135 CALL writebuffer_csocket(psockfd, c_loc(cdata), 8)
137 CALL timestop(handle)
145 SUBROUTINE writebuffer_i(psockfd, fdata)
146 INTEGER,
INTENT(IN) :: psockfd, fdata
148 CHARACTER(len=*),
PARAMETER :: routineN =
'writebuffer_i'
151 INTEGER(KIND=C_INT),
TARGET :: cdata
153 CALL timeset(routinen, handle)
156 CALL writebuffer_csocket(psockfd, c_loc(cdata), 4)
158 CALL timestop(handle)
167 SUBROUTINE writebuffer_s(psockfd, fstring, plen)
168 INTEGER,
INTENT(IN) :: psockfd
169 CHARACTER(LEN=*),
INTENT(IN) :: fstring
170 INTEGER,
INTENT(IN) :: plen
172 CHARACTER(len=*),
PARAMETER :: routineN =
'writebuffer_s'
175 CHARACTER(LEN=1, KIND=C_CHAR),
TARGET :: cstring(plen)
177 CALL timeset(routinen, handle)
180 cstring(i) = fstring(i:i)
182 CALL writebuffer_csocket(psockfd, c_loc(cstring(1)), plen)
184 CALL timestop(handle)
194 SUBROUTINE writebuffer_dv(psockfd, fdata, plen)
195 INTEGER,
INTENT(IN) :: psockfd, plen
196 REAL(KIND=
dp),
INTENT(IN),
TARGET :: fdata(plen)
198 CHARACTER(len=*),
PARAMETER :: routineN =
'writebuffer_dv'
202 CALL timeset(routinen, handle)
204 CALL writebuffer_csocket(psockfd, c_loc(fdata(1)), 8*plen)
206 CALL timestop(handle)
214 SUBROUTINE readbuffer_d(psockfd, fdata)
215 INTEGER,
INTENT(IN) :: psockfd
216 REAL(KIND=
dp),
INTENT(OUT) :: fdata
218 CHARACTER(len=*),
PARAMETER :: routineN =
'readbuffer_d'
221 REAL(KIND=c_double),
TARGET :: cdata
223 CALL timeset(routinen, handle)
225 CALL readbuffer_csocket(psockfd, c_loc(cdata), 8)
228 CALL timestop(handle)
236 SUBROUTINE readbuffer_i(psockfd, fdata)
237 INTEGER,
INTENT(IN) :: psockfd
238 INTEGER,
INTENT(OUT) :: fdata
240 CHARACTER(len=*),
PARAMETER :: routineN =
'readbuffer_i'
243 INTEGER(KIND=C_INT),
TARGET :: cdata
245 CALL timeset(routinen, handle)
247 CALL readbuffer_csocket(psockfd, c_loc(cdata), 4)
250 CALL timestop(handle)
259 SUBROUTINE readbuffer_s(psockfd, fstring, plen)
260 INTEGER,
INTENT(IN) :: psockfd
261 CHARACTER(LEN=*),
INTENT(OUT) :: fstring
262 INTEGER,
INTENT(IN) :: plen
264 CHARACTER(len=*),
PARAMETER :: routineN =
'readbuffer_s'
267 CHARACTER(LEN=1, KIND=C_CHAR),
TARGET :: cstring(plen)
269 CALL timeset(routinen, handle)
271 CALL readbuffer_csocket(psockfd, c_loc(cstring(1)), plen)
274 fstring(i:i) = cstring(i)
277 CALL timestop(handle)
287 SUBROUTINE readbuffer_dv(psockfd, fdata, plen)
288 INTEGER,
INTENT(IN) :: psockfd, plen
289 REAL(KIND=
dp),
INTENT(OUT),
TARGET :: fdata(plen)
291 CHARACTER(len=*),
PARAMETER :: routineN =
'readbuffer_dv'
295 CALL timeset(routinen, handle)
297 CALL readbuffer_csocket(psockfd, c_loc(fdata(1)), 8*plen)
299 CALL timestop(handle)
Defines the basic variable types.
integer, parameter, public dp
Implements UNIX and INET sockets.
void open_bind_socket(int *psockfd, int *inet, int *port, char *host)
Opens and binds a socket.
void writebuffer(int *psockfd, char *data, int *plen)
Writes to a socket.
void accept_socket(int *psockfd, int *pclientfd)
Listens to a socket.
void uwait(double *dsec)
Mini-wrapper to nanosleep.
void close_socket(int *psockfd)
Closes a socket.
void listen_socket(int *psockfd, int *backlog)
Listens to a socket.
void readbuffer(int *psockfd, char *data, int *plen)
Reads from a socket.
void remove_socket_file(char *host)
Removes a socket file.