我正在使用Boost 1.45 ASIO处理一个在Windows和Mac上运行的应用程序中的一些套接字连接。在Windows上,以下代码不会导致任何错误,并且我的套接字可以干净地关闭。但是在Mac上,无论是shutdown还是close函数(如果我将其注释掉)都会给我“坏文件描述符”错误。在调用此代码之前,套接字正常工作。但是一旦我调用shutdown或close,就会出现错误。有什么想法可能是怎么回事?
if(socket.is_open())
{
socket.shutdown(socket.both);
socket.close();
}
~socket()
dtor会关闭底层本地描述符类型。您明确关闭它是否有原因? - Sam Millerclose
上出现 "Bad file descriptor" 通常意味着文件描述符已经被关闭,这是一个潜在的严重错误,因为描述符会被重新使用。例如,如果您的程序错误地两次关闭(比如)描述符5,而您(或另一个线程!)恰好在其中创建了一个新的描述符,则新的描述符也将是5,并且错误的close
将关闭它。因此,虽然我不知道您问题的答案,但我强烈建议找出根本原因,而不是通过析构函数忽略它或“把它藏起来”。 - Nemo