|
@@ -281,6 +281,21 @@ void NetSocketPosix::_set_socket(SOCKET_TYPE p_sock, IP::Type p_ip_type, bool p_
|
|
|
_sock = p_sock;
|
|
|
_ip_type = p_ip_type;
|
|
|
_is_stream = p_is_stream;
|
|
|
+ // Disable descriptor sharing with subprocesses.
|
|
|
+ _set_close_exec_enabled(true);
|
|
|
+}
|
|
|
+
|
|
|
+void NetSocketPosix::_set_close_exec_enabled(bool p_enabled) {
|
|
|
+#ifndef WINDOWS_ENABLED
|
|
|
+ // Enable close on exec to avoid sharing with subprocesses. Off by default on Windows.
|
|
|
+#if defined(NO_FCNTL)
|
|
|
+ unsigned long par = p_enabled ? 1 : 0;
|
|
|
+ SOCK_IOCTL(_sock, FIOCLEX, &par);
|
|
|
+#else
|
|
|
+ int opts = fcntl(_sock, F_GETFD);
|
|
|
+ fcntl(_sock, F_SETFD, opts | FD_CLOEXEC);
|
|
|
+#endif
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
Error NetSocketPosix::open(Type p_sock_type, IP::Type &ip_type) {
|
|
@@ -321,6 +336,9 @@ Error NetSocketPosix::open(Type p_sock_type, IP::Type &ip_type) {
|
|
|
|
|
|
_is_stream = p_sock_type == TYPE_TCP;
|
|
|
|
|
|
+ // Disable descriptor sharing with subprocesses.
|
|
|
+ _set_close_exec_enabled(true);
|
|
|
+
|
|
|
#if defined(WINDOWS_ENABLED)
|
|
|
if (!_is_stream) {
|
|
|
// Disable windows feature/bug reporting WSAECONNRESET/WSAENETRESET when
|