【发布时间】:2023-04-10 11:36:02
【问题描述】:
我有一个已接受的文件描述符来设置 SOCK_CLOEXEC。谁能告诉我如何测试已设置 O_CLOEXEC/SOCK_CLOEXEC 的 FD(接受的套接字不是任何 fd)的功能
accepted_fd = accept4(lsn_fd, (struct sockaddr *)& tcp_remote, &size, SOCK_CLOEXEC);
请通过任何方法,任何测试它的代码提供给我,除非通过测试 FD_CLOEXE 是否被返回
fdf = fcntl(accept_fd, F_GETFD);
分叉代码:
pid_t childpid;
childpid = fork();
if (childpid >= 0) /* fork succeeded */
{
if (childpid == 0) /* fork() returns 0 to the child process */
{
rc = recv_gd_flow2(0, accepted_fd, count+1); /* wrapper function calls recv() */
CHECK_VALUE("recv_gd_flow, with 0", rc, 0, goto cleanup);
execl("/bin/ls", "ls", NULL); //EXEC ls
//CHILD
if(accepted_fd != INVALID_SOCKET)
printf("I am Child and sock is closed\n");
else
printf("I am Child and sock is opend\n");
}
else{
if(accepted_fd != INVALID_SOCKET)
printf("I am Parent and sock is closed\n");
else
printf("I am Parent and sock is opend\n");
//
}
}
// The purpose of this code to see if child has a privileged to get a leaked fd, i think he shouldn't
【问题讨论】:
-
fcntl有什么问题? -
只有当这个套接字设置标志时才会得到我想测试标志它如何与接受的套接字一起工作,我尝试了 fork()、exec() 但我不知道如何和他们一起测试,或者我做错了什么..请帮助:(
-
你觉得有什么办法吗??
-
能否包含您用于
fork()和exec()测试的代码? -
pid_t childpid; childpid = fork(); if (childpid >= 0) /* fork 成功 / { if (childpid == 0) / fork() 返回 0 给子进程 */ { rc = recv_gd_flow2(0, sock, count+ 1); CHECK_VALUE("recv_gd_flow, with 0", rc, 0, goto cleanup); //CHILD if(sock != INVALID_SOCKET) printf("I am Child and sock is closed\n"); else printf("我是孩子,袜子打开了\n"); }
标签: c linux sockets unix network-programming