Only create the socket once. If we fail to connect is we should try to reuse it later.
This commit is contained in:
parent
1f93cf91f8
commit
ed3ce34422
1 changed files with 6 additions and 4 deletions
|
@ -38,7 +38,7 @@ public:
|
||||||
|
|
||||||
Socket::Socket() {
|
Socket::Socket() {
|
||||||
d = new PrivateData;
|
d = new PrivateData;
|
||||||
d->socket = 0;
|
d->socket = -1;
|
||||||
d->connected = false;
|
d->connected = false;
|
||||||
FD_ZERO(&d->infds);
|
FD_ZERO(&d->infds);
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ Socket::Socket(SOCKET_T socket) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Socket::~Socket(void) {
|
Socket::~Socket(void) {
|
||||||
if(d->socket) {
|
if(d->socket >= 0) {
|
||||||
close(d->socket);
|
close(d->socket);
|
||||||
}
|
}
|
||||||
delete d;
|
delete d;
|
||||||
|
@ -61,9 +61,11 @@ void Socket::connect(const std::wstring &server) {
|
||||||
struct sockaddr_un remote;
|
struct sockaddr_un remote;
|
||||||
socklen_t len;
|
socklen_t len;
|
||||||
|
|
||||||
|
if (d->socket == -1) {
|
||||||
if ((d->socket = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0)) == -1) {
|
if ((d->socket = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0)) == -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#if defined(_MACOSX)
|
#if defined(_MACOSX)
|
||||||
int op = fcntl(d->socket, F_GETFD);
|
int op = fcntl(d->socket, F_GETFD);
|
||||||
fcntl(d->socket, F_SETFD, op | FD_CLOEXEC); // OS X doesn't support SOCK_CLOEXEC yet
|
fcntl(d->socket, F_SETFD, op | FD_CLOEXEC); // OS X doesn't support SOCK_CLOEXEC yet
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue