我有一个文件描述符(基本上是套接字描述符)示例sockfd。我使用dup2来命令 (void)dup2(sockfd,0);
然后我关闭描述符close(sockfd);
现在我尝试在接收recv(0,buf,sizeof(buf),0)时收到消息;
但是它的工作没有错呢?
答案 0 :(得分:7)
dup2
未返回void
,它返回int
,因此您应检查其返回码。如果dup2
由于某种原因而失败,那就是问题,那么你就不会知道了。话虽如此,dup2
通常一直有效。
有一个角落案例可能导致你所看到的:如果sockfd
已经是0.那么你将dup2
0到0然后关闭0,让你没有文件描述符。因此,在使用dup2
检查您尝试重新编号的文件描述符是否已正确编号之前,这是一种很好的做法。但同样,在你的情况下,这不可能比sockfd
开始为0。
还有人说,你要做的事情应该有效。如果不是,那么除非你通过“它不起作用”澄清你的意思,否则没有人可以回答你的问题。