Rewrite Buffer programma
This commit is contained in:
parent
be1b8068a4
commit
3978783f28
1 changed files with 32 additions and 5 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue