summaryrefslogtreecommitdiff
path: root/noncore/net/wellenreiter/libwellenreiter/source/sock.cc
Unidiff
Diffstat (limited to 'noncore/net/wellenreiter/libwellenreiter/source/sock.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/libwellenreiter/source/sock.cc73
1 files changed, 73 insertions, 0 deletions
diff --git a/noncore/net/wellenreiter/libwellenreiter/source/sock.cc b/noncore/net/wellenreiter/libwellenreiter/source/sock.cc
new file mode 100644
index 0000000..2cc16eb
--- a/dev/null
+++ b/noncore/net/wellenreiter/libwellenreiter/source/sock.cc
@@ -0,0 +1,73 @@
1/*
2 * Socket operations for wellenreiter
3 *
4 * $Id$
5 */
6
7#include "sock.hh"
8#include "log.hh"
9
10/* Setup UDP Socket for incoming commands */
11int commsock(const char *host, int port)
12{
13 struct sockaddr_in saddr;
14 int sock;
15
16 if((sock=socket(AF_INET, SOCK_DGRAM, 0)) < 0)
17 {
18 wl_logerr("Cannot set up socket: %s", strerror(errno));
19 return -1;
20 }
21
22 memset(&saddr, 0, sizeof(saddr));
23 saddr.sin_family = PF_INET;
24 saddr.sin_port = htons(port);
25 saddr.sin_addr.s_addr = inet_addr(host);
26
27 if(bind(sock,(struct sockaddr *)&saddr, sizeof(saddr)) < 0)
28 {
29 wl_logerr("Cannot bind socket: %s", strerror(errno));
30 close(sock);
31 return -1;
32 }
33
34 return sock;
35}
36
37/* Send a string to commsock */
38int sendcomm(const char *host, int port, const char *string, ...)
39{
40 int sock;
41 char buffer[4096];
42 struct sockaddr_in saddr;
43 va_list ap;
44
45 /* Generate string */
46 memset(buffer, 0, sizeof(buffer));
47 va_start(ap, string);
48 vsnprintf(buffer, sizeof(buffer)-1, string, ap);
49 va_end(ap);
50
51 /* Setup socket */
52 if((sock=socket(AF_INET, SOCK_DGRAM, 0)) < 0)
53 {
54 wl_logerr("Cannot set up socket: %s", strerror(errno));
55 return -1;
56 }
57
58 saddr.sin_family = AF_INET;
59 saddr.sin_port = htons(port);
60 saddr.sin_addr.s_addr = inet_addr(host);
61
62 if(sendto(sock, buffer, sizeof(buffer), 0, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
63 {
64 wl_logerr("Cannot write to socket: %s", strerror(errno));
65 close(sock);
66 return 0;
67 }
68
69 if(close(sock) < 0)
70 wl_logerr("Cannot close socket: %s", strerror(errno));
71
72 return 1;
73}