diff options
Diffstat (limited to 'src/nSocket')
-rw-r--r-- | src/nSocket/nstack/nstack_fd_mng.c | 23 | ||||
-rw-r--r-- | src/nSocket/nstack/nstack_fd_mng.h | 1 | ||||
-rw-r--r-- | src/nSocket/nstack/nstack_socket.c | 1 |
3 files changed, 25 insertions, 0 deletions
diff --git a/src/nSocket/nstack/nstack_fd_mng.c b/src/nSocket/nstack/nstack_fd_mng.c index 81d3818..e90a92c 100644 --- a/src/nSocket/nstack/nstack_fd_mng.c +++ b/src/nSocket/nstack/nstack_fd_mng.c @@ -342,6 +342,29 @@ void nstack_fork_fd(pid_t ppid) } } +void nstack_fork_init_parent(pid_t ppid) +{ + int fd; + nstack_fd_Inf *fdInf = NULL; + for (fd = 0; fd < (int) NSTACK_KERNEL_FD_MAX; fd++) + { + fdInf = nstack_get_valid_inf(fd); + if ((NULL != fdInf) && (!((u32_t) (fdInf->type) & SOCK_CLOEXEC))) + { + int i; + nstack_each_mod_inx(i) + { + if ((nstack_fd_deal[i].fork_parent_fd) + && (fdInf->protoFD[i].fd >= 0)) + { + nstack_fd_deal[i].fork_parent_fd(fdInf->protoFD[i].fd, + ppid); + } + } + } + } +} + void nstack_fork_init_child(pid_t ppid) { pid_t cpid = updata_sys_pid(); diff --git a/src/nSocket/nstack/nstack_fd_mng.h b/src/nSocket/nstack/nstack_fd_mng.h index fcf7ed4..6af8c64 100644 --- a/src/nSocket/nstack/nstack_fd_mng.h +++ b/src/nSocket/nstack/nstack_fd_mng.h @@ -225,6 +225,7 @@ extern void nstack_fd_free(nstack_fd_Inf * fdInf); void nstack_fork_init_child(pid_t ppid); void nstack_fork_fd(pid_t ppid); +void nstack_fork_init_parent(pid_t ppid); #ifdef __cplusplus /* *INDENT-OFF* */ diff --git a/src/nSocket/nstack/nstack_socket.c b/src/nSocket/nstack/nstack_socket.c index a69747d..0248226 100644 --- a/src/nSocket/nstack/nstack_socket.c +++ b/src/nSocket/nstack/nstack_socket.c @@ -3095,6 +3095,7 @@ pid_t nstack_fork(void) dmm_write_lock(get_fork_lock()); if (NSTACK_MODULE_SUCCESS == g_nStackInfo.fwInited) { + nstack_fork_init_parent(ppid); fork_parent_start(ppid); pid = nsfw_base_fork(); if (pid == 0) |