WL#1835: New SOCK type for communication
Affects: Server-4.1
—
Status: Un-Assigned
Info: I (Tomas Ulin) did a quick implementation and test of this but dod not get
any performance difference.
To enable that we can use TCP/IP socket strictly or
Unix socket/TCP/IP socket based on best performance we need a new
transporter type SOCK.
The current type TCP always TCP/IP sockets independent of how the
configuration is set-up.
The new type will use the most optimal socket implementation for the
connection.
For local connections on Unix this means that SOCK will use Unix sockets.
A description of using Unix sockets is provided here:
Instead of using struct sockaddr_in one instead uses
struct sockaddr_un.
On the client side this means that the code changes slightly:
1) First declare server address=servaddr using struct sockaddr_un instead of
struct sockaddr_in
2) Use AF_LOCAL instead of AF_INET in call to socket(..)
3) Set
servaddr.sun_family=AF_LOCAL
strcpy(servaddr.sun_path, path_string)
in sockaddr_un struct before calling connect as usual
path_string is the path to file used for the socket communication
On the server side it also changes slightly:
1) same as 1) for client side
2) same as 2) for client side
3) unlink(path_string)
This is necessary to avoid problems with remaining files.
4) call bind, listen and accept as usual with the struct sockaddr_un reference
The socket option TCP_NODELAY is most likely not available on Unix sockets so
setting this should not be done for Unix sockets.
The server changes affects startTCPServer() and acceptClient() in
TCP_Transporter.cpp and client changes affects connectClient() and
there are also changes in setSocketOptions().
It should be very easy to simply have a flag with if-statements in those
routines or something like that.
With union on struct sockaddr_in and struct sockaddr_un it should be possible
to use same calls in a few places.
The name on the file is proposed to be:
/tmp/ndb_sock12to14port10101.sock
if communication is set-up between node 12 and node 14 using port 10101
Copyright (c) 2000, 2025, Oracle Corporation and/or its affiliates. All rights reserved.