Introduction
Introduction Statistics Contact Development Disclaimer Help
io_clr.c - sacc - sacc - sacc(omys), simple console gopher client (config)
git clone git://git.codemadness.org/sacc
Log
Files
Refs
LICENSE
---
io_clr.c (1406B)
---
1 #include <string.h>
2 #include <unistd.h>
3 #include <netdb.h>
4
5 #include <sys/socket.h>
6
7 #include "common.h"
8 #include "io.h"
9
10 static int
11 setup_clr(void)
12 {
13 return 0;
14 }
15
16 static int
17 close_clr(struct cnx *c)
18 {
19 return close(c->sock);
20 }
21
22 static int
23 connect_clr(struct cnx *c, struct addrinfo *ai, const char *host)
24 {
25 return connect(c->sock, ai->ai_addr, ai->ai_addrlen);
26 }
27
28 static void
29 connerr_clr(struct cnx *c, const char *host, const char *port, int err)
30 {
31 if (c->sock == -1)
32 diag("Can't open socket: %s", strerror(err));
33 else
34 diag("Can't connect to: %s:%s: %s", host, port, strerror…
35 }
36
37 static char *
38 parseurl_clr(char *url)
39 {
40 char *p;
41
42 if (p = strstr(url, "://")) {
43 if (strncmp(url, "gopher", p - url))
44 die("Protocol not supported: %.*s", p - url, url…
45
46 url = p + 3;
47 }
48
49 return url;
50 }
51
52 static ssize_t
53 read_clr(struct cnx *c, void *buf, size_t bs)
54 {
55 return read(c->sock, buf, bs);
56 }
57
58 static ssize_t
59 write_clr(struct cnx *c, void *buf, size_t bs)
60 {
61 return write(c->sock, buf, bs);
62 }
63
64 int (*iosetup)(void) = setup_clr;
65 int (*ioclose)(struct cnx *) = close_clr;
66 int (*ioconnect)(struct cnx *, struct addrinfo *, const char *) = connec…
67 void (*ioconnerr)(struct cnx *, const char *, const char *, int) = conne…
68 char *(*ioparseurl)(char *) = parseurl_clr;
69 ssize_t (*ioread)(struct cnx *, void *, size_t) = read_clr;
70 ssize_t (*iowrite)(struct cnx *, void *, size_t) = write_clr;
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.