add IOCompleteHandler