41 #define _POSIX_C_SOURCE 200809L
45 #include <netinet/in.h>
49 #include <sys/select.h>
50 #include <sys/socket.h>
51 #include <sys/types.h>
74 struct addrinfo hints, *res;
77 memset(&hints, 0,
sizeof(hints));
78 hints.ai_socktype = SOCK_STREAM;
79 hints.ai_family = AF_INET;
80 hints.ai_flags = AI_PASSIVE;
82 sprintf(service,
"%d", *port);
83 ai_err = getaddrinfo(host, service, &hints, &res);
85 perror(
"Error fetching host data. Wrong host name?");
90 sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
92 perror(
"Error opening socket");
97 if (connect(sockfd, res->ai_addr, res->ai_addrlen) < 0) {
98 perror(
"Error opening INET socket: wrong port or server unreachable");
103 struct sockaddr_un serv_addr;
106 memset(&serv_addr, 0,
sizeof(serv_addr));
107 serv_addr.sun_family = AF_UNIX;
108 strcpy(serv_addr.sun_path,
"/tmp/qiskit_");
109 strcpy(serv_addr.sun_path + 12, host);
112 sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
115 if (connect(sockfd, (
struct sockaddr *)&serv_addr,
sizeof(serv_addr)) < 0) {
117 "Error opening UNIX socket: path unavailable, or already existing");
143 struct addrinfo hints, *res;
146 memset(&hints, 0,
sizeof(hints));
147 hints.ai_socktype = SOCK_STREAM;
148 hints.ai_family = AF_INET;
149 hints.ai_flags = AI_PASSIVE;
151 sprintf(service,
"%d", *port);
152 ai_err = getaddrinfo(host, service, &hints, &res);
154 perror(
"Error fetching host data. Wrong host name?");
159 sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
161 perror(
"Error opening socket");
166 if (bind(sockfd, res->ai_addr, res->ai_addrlen) < 0) {
167 perror(
"Error binding INET socket: wrong port or server unreachable");
172 struct sockaddr_un serv_addr;
175 memset(&serv_addr, 0,
sizeof(serv_addr));
176 serv_addr.sun_family = AF_UNIX;
177 strcpy(serv_addr.sun_path, host);
180 sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
182 remove(serv_addr.sun_path);
185 if (bind(sockfd, (
struct sockaddr *)&serv_addr,
sizeof(serv_addr)) < 0) {
187 "Error binding UNIX socket: path unavailable, or already existing");
203 int sockfd = *psockfd;
206 n = write(sockfd, data, len);
208 perror(
"Error writing to socket: server has quit or connection broke");
221 int sockfd = *psockfd;
224 n = nr = read(sockfd, data, len);
226 while (nr > 0 && n < len) {
227 nr = read(sockfd, &data[n], len - n);
232 perror(
"Error reading from socket: server has quit or connection broke");
245 if (listen(*psockfd, *backlog) < 0) {
246 perror(
"Error listening socket");
258 int client_fd = accept(*psockfd, NULL, NULL);
260 *pclientfd = client_fd;
280 struct timespec wt, rem;
281 wt.tv_sec = floor(*dsec);
282 wt.tv_nsec = (*dsec - wt.tv_sec) * 1000000000;
283 nanosleep(&wt, &rem);
void open_bind_socket(int *psockfd, int *inet, int *port, char *host)
Opens and binds a socket.
void open_connect_socket(int *psockfd, int *inet, int *port, char *host)
Opens and connects 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.