SET_CONTROL_LINE STATE is what I wanted.
I ended up using the following code:
USB_SETUP_STRUCT setupPkt;
unsigned int size;
#define CLR_CARRIER_DETECT 0x00
setupPkt.request_type = USB_REQUEST_CLASS_CLASS;
setupPkt.request = SET_CONTROL_LINE_STATE;
setupPkt.value = CLR_CARRIER_DETECT;
setupPkt.index = 0;
setupPkt.length = USB_SETUP_PKT_SIZE;
(void)USB_CDC_Other_Requests(&setupPkt, NULL, &size,
cdc_device_array[cdcHandle]);
I had to extern cdc_device_array because most CDC calls want the index to the device pointer instead of the device pointer. This call wants the device pointer itself. cdcHandle is the value returned from USB_Class_CDC_Init.
This code is useful if your application is Java and you are attaching to it using a virtual COM port. Since Java doesn't know about the USB layer, you can change the carrier detect signal to indicate that the device has been removed. This allows my application to cleanly exit instead of crashing java because the serial port has disappeared.
Thanks timias. Your information got me on the right track.