Two Generals Problems - What's wrong with my approach?
New answer
After thinking some more and searching around for a bit I beleive both of your approaches are already implemented in TCP, as can be seen here:

[...] Acknowledgements (ACKs) are sent with a sequence number by the receiver of data to tell the sender that data has been received to the specified byte. [...]
Reliability is achieved by the sender detecting lost data and retransmitting it. TCP uses two primary techniques to identify loss. Retransmission timeout (abbreviated as RTO) and duplicate cumulative acknowledgements (DupAcks).
Timeout-based retransmission
Whenever a packet is sent, the sender sets a timer that is a conservative estimate of when that packet will be acked. If the sender does not receive an ACK by then, it transmits that packet again. [...]
Dupack-based retransmission
If a single packet (say packet 100) in a stream is lost, then [...] the receiver acknowledges packet 99 again on the receipt of another data packet. [...] if the sender receives three duplicate acknowledgements, it retransmits the last unacknowledged packet. [...]

Retransmission timeout
Retransmission timeout is similar to your first approach: if general A did not receive the confirmation, he will send the same message again.
Duplicate cumulative acknowledgements
First we need to understand the steps taken in each algorithm.
TCP

The sender did not receive an acknowledgement so it sends the same message again.
The receiver notices that the same message is being sent again so it sends the same acknowledgement it sent previously for this message.
Only when the sender receives this acknowledgement it will send the next message. Only when the sender sends a new message will the receiver know that the confirmation has been received.

Your special case

General A did not receive an acknwoledgement so he sends the same message again.
General B notices that the same message is being sent again so he sends the same confirmation he sent previously for this message.
Only when general A receives this acknowledgement he will send the next message. Only when general A sends a new message will general B know that the confirmation has been received.

We can see that both algorithms are the same, except for their terminology. So there isn't any problem with your approaches.

Old, wrong answer
The problem with your Special Case approach is that B cannot do anything until new communication is sent. Because this can happen after the attack time has passed, this is not a functional approach.
Translated to real life networking, this means that the message has to sit in the buffer until the next message is received. This is not a usable strategy in most applications.