diff options
Diffstat (limited to 'sock_stuff.c')
| -rw-r--r-- | sock_stuff.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/sock_stuff.c b/sock_stuff.c index 796a0f9..78249e6 100644 --- a/sock_stuff.c +++ b/sock_stuff.c | |||
| @@ -13,6 +13,13 @@ | |||
| 13 | 13 | ||
| 14 | #define RECV_TIMEOUT 10000 | 14 | #define RECV_TIMEOUT 10000 |
| 15 | 15 | ||
| 16 | static int verbose = 0; | ||
| 17 | |||
| 18 | void sock_stuff_set_verbose(int level) | ||
| 19 | { | ||
| 20 | verbose = level; | ||
| 21 | } | ||
| 22 | |||
| 16 | int create_unix_socket (const char *filename) | 23 | int create_unix_socket (const char *filename) |
| 17 | { | 24 | { |
| 18 | struct sockaddr_un name; | 25 | struct sockaddr_un name; |
| @@ -68,19 +75,19 @@ int connect_unix_socket(const char *filename) | |||
| 68 | 75 | ||
| 69 | // check if socket file exists... | 76 | // check if socket file exists... |
| 70 | if (stat(filename, &fst) != 0) { | 77 | if (stat(filename, &fst) != 0) { |
| 71 | fprintf(stderr, "%s: stat '%s': %s\n", __func__, filename, strerror(errno)); | 78 | if (verbose >= 2) fprintf(stderr, "%s: stat '%s': %s\n", __func__, filename, strerror(errno)); |
| 72 | return -1; | 79 | return -1; |
| 73 | } | 80 | } |
| 74 | 81 | ||
| 75 | // ... and if it is a unix domain socket | 82 | // ... and if it is a unix domain socket |
| 76 | if (!S_ISSOCK(fst.st_mode)) { | 83 | if (!S_ISSOCK(fst.st_mode)) { |
| 77 | fprintf(stderr, "%s: File '%s' is not a socket!\n", __func__, filename); | 84 | if (verbose >= 2) fprintf(stderr, "%s: File '%s' is not a socket!\n", __func__, filename); |
| 78 | return -1; | 85 | return -1; |
| 79 | } | 86 | } |
| 80 | 87 | ||
| 81 | // make a new socket | 88 | // make a new socket |
| 82 | if ((sfd = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0) { | 89 | if ((sfd = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0) { |
| 83 | fprintf(stderr, "%s: socket: %s\n", __func__, strerror(errno)); | 90 | if (verbose >= 2) fprintf(stderr, "%s: socket: %s\n", __func__, strerror(errno)); |
| 84 | return -1; | 91 | return -1; |
| 85 | } | 92 | } |
| 86 | 93 | ||
| @@ -94,7 +101,7 @@ int connect_unix_socket(const char *filename) | |||
| 94 | 101 | ||
| 95 | if (connect(sfd, (struct sockaddr*)&name, size) < 0) { | 102 | if (connect(sfd, (struct sockaddr*)&name, size) < 0) { |
| 96 | close(sfd); | 103 | close(sfd); |
| 97 | fprintf(stderr, "%s: connect: %s\n", __func__, strerror(errno)); | 104 | if (verbose >= 2) fprintf(stderr, "%s: connect: %s\n", __func__, strerror(errno)); |
| 98 | return -1; | 105 | return -1; |
| 99 | } | 106 | } |
| 100 | 107 | ||
| @@ -151,12 +158,12 @@ int connect_socket(const char *addr, uint16_t port) | |||
| 151 | } | 158 | } |
| 152 | 159 | ||
| 153 | if ((hp = gethostbyname(addr)) == NULL) { | 160 | if ((hp = gethostbyname(addr)) == NULL) { |
| 154 | fprintf(stderr, "%s: unknown host '%s'\n", __func__, addr); | 161 | if (verbose >= 2) fprintf(stderr, "%s: unknown host '%s'\n", __func__, addr); |
| 155 | return -1; | 162 | return -1; |
| 156 | } | 163 | } |
| 157 | 164 | ||
| 158 | if (!hp->h_addr) { | 165 | if (!hp->h_addr) { |
| 159 | fprintf(stderr, "%s: gethostbyname returned NULL address!\n", __func__); | 166 | if (verbose >= 2) fprintf(stderr, "%s: gethostbyname returned NULL address!\n", __func__); |
| 160 | return -1; | 167 | return -1; |
| 161 | } | 168 | } |
| 162 | 169 | ||
| @@ -193,7 +200,7 @@ int check_fd(int fd, fd_mode fdm, unsigned int timeout) | |||
| 193 | struct timeval to; | 200 | struct timeval to; |
| 194 | 201 | ||
| 195 | if (fd <= 0) { | 202 | if (fd <= 0) { |
| 196 | fprintf(stderr, "ERROR: invalid fd in check_fd %d\n", fd); | 203 | if (verbose >= 2) fprintf(stderr, "ERROR: invalid fd in check_fd %d\n", fd); |
| 197 | return -1; | 204 | return -1; |
| 198 | } | 205 | } |
| 199 | 206 | ||
| @@ -223,14 +230,14 @@ int check_fd(int fd, fd_mode fdm, unsigned int timeout) | |||
| 223 | switch(errno) { | 230 | switch(errno) { |
| 224 | case EINTR: | 231 | case EINTR: |
| 225 | // interrupt signal in select | 232 | // interrupt signal in select |
| 226 | fprintf(stderr, "%s: EINTR\n", __func__); | 233 | if (verbose >= 2) fprintf(stderr, "%s: EINTR\n", __func__); |
| 227 | eagain = 1; | 234 | eagain = 1; |
| 228 | break; | 235 | break; |
| 229 | case EAGAIN: | 236 | case EAGAIN: |
| 230 | fprintf(stderr, "%s: EAGAIN\n", __func__); | 237 | if (verbose >= 2) fprintf(stderr, "%s: EAGAIN\n", __func__); |
| 231 | break; | 238 | break; |
| 232 | default: | 239 | default: |
| 233 | fprintf(stderr, "%s: select failed: %s\n", __func__, strerror(errno)); | 240 | if (verbose >= 2) fprintf(stderr, "%s: select failed: %s\n", __func__, strerror(errno)); |
| 234 | return -1; | 241 | return -1; |
| 235 | } | 242 | } |
| 236 | } | 243 | } |
| @@ -264,7 +271,7 @@ int recv_buf_timeout(int fd, void *data, size_t length, int flags, unsigned int | |||
| 264 | result = recv(fd, data, length, flags); | 271 | result = recv(fd, data, length, flags); |
| 265 | if (res > 0 && result == 0) { | 272 | if (res > 0 && result == 0) { |
| 266 | // but this is an error condition | 273 | // but this is an error condition |
| 267 | fprintf(stderr, "%s: fd=%d recv returned 0\n", __func__, fd); | 274 | if (verbose >= 3) fprintf(stderr, "%s: fd=%d recv returned 0\n", __func__, fd); |
| 268 | return -1; | 275 | return -1; |
| 269 | } | 276 | } |
| 270 | return result; | 277 | return result; |
