Diffstat (limited to 'noncore/net/wellenreiter/libwellenreiter/source/sock.cc') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/net/wellenreiter/libwellenreiter/source/sock.cc | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/noncore/net/wellenreiter/libwellenreiter/source/sock.cc b/noncore/net/wellenreiter/libwellenreiter/source/sock.cc index 2cc16eb..90fc20a 100644 --- a/noncore/net/wellenreiter/libwellenreiter/source/sock.cc +++ b/noncore/net/wellenreiter/libwellenreiter/source/sock.cc @@ -48,6 +48,10 @@ int sendcomm(const char *host, int port, const char *string, ...) vsnprintf(buffer, sizeof(buffer)-1, string, ap); va_end(ap); + saddr.sin_family = AF_INET; + saddr.sin_port = htons(port); + saddr.sin_addr.s_addr = inet_addr(host); + /* Setup socket */ if((sock=socket(AF_INET, SOCK_DGRAM, 0)) < 0) { @@ -55,10 +59,6 @@ int sendcomm(const char *host, int port, const char *string, ...) return -1; } - saddr.sin_family = AF_INET; - saddr.sin_port = htons(port); - saddr.sin_addr.s_addr = inet_addr(host); - if(sendto(sock, buffer, sizeof(buffer), 0, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) { wl_logerr("Cannot write to socket: %s", strerror(errno)); @@ -71,3 +71,23 @@ int sendcomm(const char *host, int port, const char *string, ...) return 1; } + +/* Check for new messages on commsock */ +int recvcomm(int *sock, char *out, int maxlen) +{ + struct sockaddr_in *cliaddr; + socklen_t len=sizeof(struct sockaddr); + char buffer[128], retval[3]; + + memset(buffer, 0, sizeof(buffer)); + if(recvfrom(*sock, buffer, sizeof(buffer)-1, 0, (struct sockaddr *)cliaddr, &len) < 0) + return -1; + + memset(out, 0, maxlen); + memcpy(out, buffer, maxlen - 1); + + memset(retval, 0, sizeof(retval)); + memcpy(retval, out, 2); + + return atoi(retval); +} |