Software Defined Networking (SDN) is a new network paradigm that has become increasingly popular in recent years. Actually, the main argument in favour of this new concept consists in bringing together the smart features of the interconnection components and directs them to a single checkpoint called controller. The latter provides a central view of the network, which simplifies management and network configuration, and makes the development of new services faster. At the operational plan, however, the SDN has to cope with potential challenges that have to do with performance, scalability, and also challenges related security and fault tolerance. Knowing how to manage failures at the SDN level is a prerequisite for its deployment in real networks. The present article, therefore, provides an overview of the major works that have addressed the issue of fault tolerance in the SDN. Given the fact that the SDN sets apart the control plane and the data plane, there exist different cases for managing failures. The focus here, however, will be placed on fault tolerance at the SDN control plane. The article concludes with a discussion of the possibility to integrate Machine Learning techniques so as to promote more intelligence, and improve the fault tolerance in the SDN control plane.