2010-03-28 62 views
2

所以我需要關閉一個特定的連接,但問題是另一個線程同時執行一個select(),它將套接字作爲它正在監視的文件描述符之一。關閉套接字並選擇()

select()會優雅地終止,還是會發生什麼壞事?

+0

Dup。 http://stackoverflow.com/questions/543541/what-does-select2-do-if-you-close2-a-file-descriptor-in-a-separate-thread和http://stackoverflow.com/questions/ 458558 /選擇上-UDP-插座犯規,結束時,插座是封閉的,什麼-AM-I-做,錯了 – Duck 2010-03-28 16:27:30

回答

0

我不是100%確定的,但是如果您在select()開始後關閉插座,應該會發生什麼情況。 select()將返回一個錯誤,如果您通過已經封閉套接字在開始(見man page)。此外,如果您使用select()等待數據讀取,它可能會報告此封閉套接字作爲準備讀取(因爲讀取將不會封閉在封閉套接字上)。

你可以寫一個簡單的程序,並實際檢查你的系統上會發生什麼。