RS232 non ha alcun tipo di indicatore di "presenza cavo". Stai solo ricevendo segnali di trasmissione o metadati (controllo) o no - questo è tutto ciò che sai. Se ricevi un segnale in ingresso (CTS|DSR|CD) sai che il cavo è collegato. Se non ricevi alcun segnale in ingresso, lo stato del cavo è indeterminato e non c'è modo di determinare se è collegato senza soluzioni hardware aggiuntive o effettuando un qualche tipo di scambio con il dispositivo remoto.
L'approccio usuale consiste nell'eseguire una sorta di trasmissione "keep-alive" (anche solo metadati - ad esempio impostare momentaneamente DTR e aspettarsi CTS) ma se la disciplina del protocollo utilizzato dal software alle due estremità del cavo vieta tale scambio inattivo, tu' sei praticamente bloccato con l'utilizzo di un saldatore per procedere.
Quello che potresti provare è una sorta di "demone" aggiuntivo che imposta una pipe, inoltrando i dati tra il tuo software e il dispositivo fisico (su entrambe le estremità), incapsulandoli ed eseguendo "controlli di connessione" se la pipe è inattiva. /P>
Consentitemi di aggiungere una soluzione piuttosto comune:se il vostro dispositivo endpoint non utilizza il controllo hardware, potete cortocircuitare DTR con CTS all'interno della spina sul lato host e utilizzare il "controllo hardware" sul lato host. La generazione di DTR guida automaticamente CTS, abilitando la trasmissione, se il cavo è presente, quindi la trasmissione non viene influenzata. Nel frattempo, con cavo assente, il sistema reagirà alla mancanza di CTS in modo appropriato a questo evento, ad es. generando un timeout o sospendendo la trasmissione finché il cavo non viene collegato.