From 3978783f2811edbd794d1338021dff9a74340831 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Sat, 20 Nov 2010 19:54:44 +0100 Subject: [PATCH] Rewrite Buffer programma --- util/ddv_socket.cpp | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/util/ddv_socket.cpp b/util/ddv_socket.cpp index dc4002c3..e7b6c099 100644 --- a/util/ddv_socket.cpp +++ b/util/ddv_socket.cpp @@ -33,7 +33,6 @@ int DDV_OpenUnix(std::string adres, bool nonblock = false){ int DDV_Listen(int port){ int s = socket(AF_INET, SOCK_STREAM, 0); - int on = 1; setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); struct sockaddr_in addr; @@ -57,9 +56,37 @@ int DDV_Listen(int port){ } } +int DDV_UnixListen(std::string adres, bool nonblock = false){ + unlink(adres.c_str()); + int s = socket(AF_UNIX, SOCK_STREAM, 0); + if (nonblock){ + int flags = fcntl(s, F_GETFL, 0); + flags |= O_NONBLOCK; + fcntl(s, F_SETFL, flags); + } + sockaddr_un addr; + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, adres.c_str(), adres.size()+1); + int ret = bind(s, (sockaddr*)&addr, sizeof(addr)); + if (ret == 0){ + ret = listen(s, 100);//start listening, backlog of 100 allowed + if (ret == 0){ + return s; + }else{ + fprintf(stderr, "Listen failed! Error: %s\n", strerror(errno)); + close(s); + return 0; + } + }else{ + fprintf(stderr, "Binding failed! Error: %s\n", strerror(errno)); + close(s); + return 0; + } +} + int DDV_Accept(int sock, bool nonblock = false){ int r = accept(sock, 0, 0); - if ((r > 0) && nonblock){ + if ((r >= 0) && nonblock){ int flags = fcntl(r, F_GETFL, 0); flags |= O_NONBLOCK; fcntl(r, F_SETFL, flags); @@ -126,11 +153,11 @@ int DDV_iwrite(void * buffer, int todo, int sock){ int r = send(sock, buffer, todo, 0); if (r < 0){ switch (errno){ - case EWOULDBLOCK: break; + case EWOULDBLOCK: return 0; break; default: socketError = true; fprintf(stderr, "Could not write! %s\n", strerror(errno)); - return false; + return 0; break; } } @@ -145,7 +172,7 @@ int DDV_iread(void * buffer, int todo, int sock){ default: socketError = true; fprintf(stderr, "Could not read! %s\n", strerror(errno)); - return false; + return 0; break; } }