Rewrite Buffer programma

This commit is contained in:
Thulinma 2010-11-20 19:54:44 +01:00
parent be1b8068a4
commit 3978783f28

View file

@ -33,7 +33,6 @@ int DDV_OpenUnix(std::string adres, bool nonblock = false){
int DDV_Listen(int port){ int DDV_Listen(int port){
int s = socket(AF_INET, SOCK_STREAM, 0); int s = socket(AF_INET, SOCK_STREAM, 0);
int on = 1; int on = 1;
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
struct sockaddr_in addr; 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 DDV_Accept(int sock, bool nonblock = false){
int r = accept(sock, 0, 0); int r = accept(sock, 0, 0);
if ((r > 0) && nonblock){ if ((r >= 0) && nonblock){
int flags = fcntl(r, F_GETFL, 0); int flags = fcntl(r, F_GETFL, 0);
flags |= O_NONBLOCK; flags |= O_NONBLOCK;
fcntl(r, F_SETFL, flags); 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); int r = send(sock, buffer, todo, 0);
if (r < 0){ if (r < 0){
switch (errno){ switch (errno){
case EWOULDBLOCK: break; case EWOULDBLOCK: return 0; break;
default: default:
socketError = true; socketError = true;
fprintf(stderr, "Could not write! %s\n", strerror(errno)); fprintf(stderr, "Could not write! %s\n", strerror(errno));
return false; return 0;
break; break;
} }
} }
@ -145,7 +172,7 @@ int DDV_iread(void * buffer, int todo, int sock){
default: default:
socketError = true; socketError = true;
fprintf(stderr, "Could not read! %s\n", strerror(errno)); fprintf(stderr, "Could not read! %s\n", strerror(errno));
return false; return 0;
break; break;
} }
} }