Commit 5b712ea9d16b2017e54babf7d3695d774f6270d5
- Diff rendering mode:
- inline
- side by side
main.c
(3 / 5)
|   | |||
| 35 | 35 | int | |
| 36 | 36 | main(int argc, char **argv) | |
| 37 | 37 | { | |
| 38 | char *hostname=0x00; | ||
| 39 | char *svc=0x00; | ||
| 40 | 38 | time_t t=0, status; | |
| 39 | requested_socket req; | ||
| 41 | 40 | ||
| 42 | 41 | if (argc < 3) { | |
| 43 | 42 | usage(argv[0]); | |
| 44 | 43 | exit(0); | |
| 45 | 44 | } | |
| 46 | 45 | ||
| 47 | hostname = argv[1]; | ||
| 48 | svc=argv[2]; | ||
| 46 | req = mk_req(argv[1], argv[2]); | ||
| 49 | 47 | ||
| 50 | while((status=attemptConnection(hostname, svc)) != RV_SUCCESS) { | ||
| 48 | while((status=attemptConnection(req)) != RV_SUCCESS) { | ||
| 51 | 49 | t=time(NULL); | |
| 52 | 50 | char *err="unknown"; | |
| 53 | 51 | switch(status) { |
sockets.c
(15 / 4)
|   | |||
| 22 | 22 | ||
| 23 | 23 | #include "waitforsocket.h" | |
| 24 | 24 | ||
| 25 | requested_socket mk_req(char *host, char *svc) | ||
| 26 | { | ||
| 27 | requested_socket rv; | ||
| 28 | |||
| 29 | rv.host=host; | ||
| 30 | rv.svc=svc; | ||
| 31 | rv.success=0; | ||
| 32 | |||
| 33 | return rv; | ||
| 34 | } | ||
| 35 | |||
| 25 | 36 | static enum returnvalues waitForConnect(int s) | |
| 26 | 37 | { | |
| 27 | 38 | int selected=0; | |
| … | … | ||
| 75 | 75 | } | |
| 76 | 76 | ||
| 77 | 77 | enum returnvalues | |
| 78 | attemptConnection(char *host, char *svc) | ||
| 78 | attemptConnection(requested_socket req) | ||
| 79 | 79 | { | |
| 80 | 80 | struct addrinfo hints, *res, *res0; | |
| 81 | 81 | enum returnvalues rv=ERR_ERRNO; | |
| … | … | ||
| 85 | 85 | char *cause=NULL; | |
| 86 | 86 | int err=0; | |
| 87 | 87 | ||
| 88 | if (host == NULL || svc == NULL) { | ||
| 88 | if (req.host == NULL || req.svc == NULL) { | ||
| 89 | 89 | return (0); | |
| 90 | 90 | } | |
| 91 | 91 | ||
| 92 | 92 | memset(&hints, 0, sizeof(hints)); | |
| 93 | 93 | hints.ai_family = PF_UNSPEC; | |
| 94 | 94 | hints.ai_socktype = SOCK_STREAM; | |
| 95 | err=getaddrinfo(host, svc, &hints, &res0); | ||
| 95 | err=getaddrinfo(req.host, req.svc, &hints, &res0); | ||
| 96 | 96 | if(err != 0) { | |
| 97 | 97 | fprintf(stderr, "Error looking up %s:%s: %s\n", | |
| 98 | host, svc, gai_strerror(err)); | ||
| 98 | req.host, req.svc, gai_strerror(err)); | ||
| 99 | 99 | return(ERR_DNS); | |
| 100 | 100 | } | |
| 101 | 101 |
waitforsocket.h
(9 / 1)
|   | |||
| 2 | 2 | * Copyright (c) 2005 Dustin Sallings <dustin@spy.net> | |
| 3 | 3 | */ | |
| 4 | 4 | ||
| 5 | typedef struct { | ||
| 6 | char *host; | ||
| 7 | char *svc; | ||
| 8 | int success; | ||
| 9 | } requested_socket; | ||
| 10 | |||
| 5 | 11 | enum returnvalues { ERR_DNS=-3, ERR_TIMEOUT=-2, ERR_ERRNO=-1, RV_SUCCESS=0 }; | |
| 6 | 12 | ||
| 7 | enum returnvalues attemptConnection(char *, char *); | ||
| 13 | enum returnvalues attemptConnection(requested_socket); | ||
| 14 | |||
| 15 | requested_socket mk_req(char *host, char *svc); |

