The server process was restarting long lived processes and it was found that, although not used, the child process was inheriting a copy of the socket descriptor. To
resolve this you must set the close on exec bit for the socket in the server process as follows:-
int flags;
flags = fcntl( fd, F_GETFD);
flags |= FD_CLOEXEC;
fcntl( fd, F_SETFD, flags );