- fixed client TCP keep alive problem (see #115)

pull/119/head
Michael Zillgith 7 years ago
parent 3d8ab44a49
commit 46f87a1656

@ -216,7 +216,7 @@ ServerSocket_accept(ServerSocket self)
fd = accept(self->fd, NULL, NULL );
if (fd >= 0) {
conSocket = TcpSocket_create();
conSocket = (Socket) GLOBAL_CALLOC(1, sizeof(struct sSocket));
conSocket->fd = fd;
}
@ -261,9 +261,20 @@ ServerSocket_destroy(ServerSocket self)
Socket
TcpSocket_create()
{
Socket self = GLOBAL_MALLOC(sizeof(struct sSocket));
Socket self = NULL;
self->fd = -1;
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock != -1) {
self = (Socket) GLOBAL_MALLOC(sizeof(struct sSocket));
self->fd = sock;
self->connectTimeout = 5000;
}
else {
if (DEBUG_SOCKET)
printf("SOCKET: failed to create socket (errno=%i)\n", errno);
}
return self;
}
@ -281,13 +292,11 @@ Socket_connect(Socket self, const char* address, int port)
struct sockaddr_in serverAddress;
if (DEBUG_SOCKET)
printf("Socket_connect: %s:%i\n", address, port);
printf("SOCKET: connect: %s:%i\n", address, port);
if (!prepareServerAddress(address, port, &serverAddress))
return false;
self->fd = socket(AF_INET, SOCK_STREAM, 0);
fd_set fdSet;
FD_ZERO(&fdSet);
FD_SET(self->fd, &fdSet);

@ -118,17 +118,30 @@ Socket_activateTcpKeepAlive(Socket self, int idleTime, int interval, int count)
socklen_t optlen = sizeof(optval);
optval = 1;
setsockopt(self->fd, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen);
if (setsockopt(self->fd, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen)) {
if (DEBUG_SOCKET)
printf("Failed to enable TCP keepalive\n");
}
#if defined TCP_KEEPCNT
optval = idleTime;
setsockopt(self->fd, IPPROTO_TCP, TCP_KEEPIDLE, &optval, optlen);
if (setsockopt(self->fd, IPPROTO_TCP, TCP_KEEPIDLE, &optval, optlen)) {
if (DEBUG_SOCKET)
printf("Failed to set TCP keepalive TCP_KEEPIDLE parameter\n");
}
optval = interval;
setsockopt(self->fd, IPPROTO_TCP, TCP_KEEPINTVL, &optval, optlen);
if (setsockopt(self->fd, IPPROTO_TCP, TCP_KEEPINTVL, &optval, optlen)) {
if (DEBUG_SOCKET)
printf("Failed to set TCP keepalive TCP_KEEPINTVL parameter\n");
}
optval = count;
setsockopt(self->fd, IPPROTO_TCP, TCP_KEEPCNT, &optval, optlen);
if (setsockopt(self->fd, IPPROTO_TCP, TCP_KEEPCNT, &optval, optlen)) {
if (DEBUG_SOCKET)
printf("Failed to set TCP keepalive TCP_KEEPCNT parameter\n");
}
#endif /* TCP_KEEPCNT */
#endif /* SO_KEEPALIVE */
@ -235,7 +248,7 @@ ServerSocket_accept(ServerSocket self)
fd = accept(self->fd, NULL, NULL );
if (fd >= 0) {
conSocket = TcpSocket_create();
conSocket = (Socket) GLOBAL_CALLOC(1, sizeof(struct sSocket));
conSocket->fd = fd;
activateTcpNoDelay(conSocket);
@ -282,10 +295,20 @@ ServerSocket_destroy(ServerSocket self)
Socket
TcpSocket_create()
{
Socket self = (Socket) GLOBAL_MALLOC(sizeof(struct sSocket));
Socket self = NULL;
self->fd = -1;
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock != -1) {
self = (Socket) GLOBAL_MALLOC(sizeof(struct sSocket));
self->fd = sock;
self->connectTimeout = 5000;
}
else {
if (DEBUG_SOCKET)
printf("SOCKET: failed to create socket (errno=%i)\n", errno);
}
return self;
}
@ -303,12 +326,14 @@ Socket_connectAsync(Socket self, const char* address, int port)
struct sockaddr_in serverAddress;
if (DEBUG_SOCKET)
printf("Socket_connect: %s:%i\n", address, port);
printf("SOCKET: connect: %s:%i\n", address, port);
if (!prepareServerAddress(address, port, &serverAddress))
return false;
self->fd = socket(AF_INET, SOCK_STREAM, 0);
fd_set fdSet;
FD_ZERO(&fdSet);
FD_SET(self->fd, &fdSet);
activateTcpNoDelay(self);

@ -276,7 +276,7 @@ ServerSocket_accept(ServerSocket self)
fd = accept(self->fd, NULL, NULL);
if (fd >= 0) {
conSocket = TcpSocket_create();
conSocket = (Socket) GLOBAL_CALLOC(1, sizeof(struct sSocket));
conSocket->fd = fd;
setSocketNonBlocking(conSocket);
@ -303,12 +303,22 @@ ServerSocket_destroy(ServerSocket self)
Socket
TcpSocket_create()
{
Socket self = (Socket) GLOBAL_MALLOC(sizeof(struct sSocket));
Socket self = NULL;
self->fd = INVALID_SOCKET;
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock != INVALID_SOCKET) {
self = (Socket) GLOBAL_MALLOC(sizeof(struct sSocket));
self->fd = sock;
self->connectTimeout = 5000;
socketCount++;
}
else {
if (DEBUG_SOCKET)
printf("SOCKET: failed to create socket (error code=%i)\n", WSAGetLastError());
}
return self;
}
@ -401,8 +411,6 @@ Socket_connect(Socket self, const char* address, int port)
if (!prepareServerAddress(address, port, &serverAddress))
return false;
self->fd = socket(AF_INET, SOCK_STREAM, 0);
setSocketNonBlocking(self);
fd_set fdSet;

@ -684,7 +684,7 @@ parseGoosePayload(GooseReceiver self, uint8_t* buffer, int apduLength)
return 0;
}
exit_with_fault:
exit_with_fault:
if (DEBUG_GOOSE_SUBSCRIBER)
printf("GOOSE_SUBSCRIBER: Invalid goose payload\n");
return -1;

Loading…
Cancel
Save