我正在用WinSock編寫windows客戶端 - 服務器應用程序,我有服務器類。
而初始化服務器我有這樣的代碼:如何決定在哪裏處理異常 - 在函數的作用域中還是全局異常?
class Server {
static const int MaxClients = 10;
std::vector connections;
CRITICAL_SECTION cs;
int port;
SOCKET ServerSocket;
sockaddr_in ServerAddress;
void init();
public:
Server(int Port);
void addConnection(const Client& newClient);
void closeConnection(int index);
void Listen();
int size();
/*virtual void ClientService();
virtual void SendMsg(const std::string& msg);*/
virtual ~Server();
};
void Server::init() {
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2, 2), &wsaData))
throw Exception("WinSock init failed");
ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ServerSocket == INVALID_SOCKET)
throw Exception("Socket failed to create!");
ServerAddress.sin_family = AF_INET;
ServerAddress.sin_addr.s_addr = htonl(INADDR_ANY);
ServerAddress.sin_port = htons(port);
if(bind(ServerSocket,(sockaddr*)&ServerAddress,sizeof(ServerAddress)) == SOCKET_ERROR)
{
throw Exception("Binding failed");
closesocket(ServerSocket);
}
}
在哪裏,我需要處理異常?這裏,在init()私有方法(從構造函數中調用)還是在主函數中? 任何規則存在的地方放置處理程序的例外和它依賴於什麼?
請注意,在拋出異常之後您的closesocket()調用永遠不會執行。 – 2009-01-10 19:26:58