fix socket descriptor leak