c ++ linux accept () blocking после закрытия сокета

У меня есть поток, который прослушивает новые соединения

new_fd = accept(Listen_fd, (struct sockaddr *) & their_addr, &sin_size);

, и другой поток, который закрывает Listen_fd, когда пора закрыть программу. Однако после закрытия Listen_fd он все еще блокируется. Когда я использую GDB для отладки, accept () не блокируется. Я думал, что это может быть проблема с SO_LINGER, но он не должен быть включен по умолчанию и не должен меняться при использовании GDB. Есть идеи, что происходит, или какие-либо другие предложения по закрытию сокета листинга?

5
задан BrandonToner 20 February 2012 в 17:09
поделиться