[英]select for reading after a fork
如果在打開udp套接字后分叉了進程,如何選擇在Linux系統上進行讀取? 特別是-在這種程序中是否有可能:
so = open socket
fork
for(;;) {
select() for reading on socket so
recv from so
}
兩個數據包將僅喚醒其中一個進程(以防它們在通知等待過程之前/退出選擇之前到達),而第二個數據包將不會被接收?
還是可以假設對於UDP,每個數據包將始終喚醒進程或保留標志設置?
每個進程(父進程和子進程)都有一個用於同一套接字的fie描述符。 每個文件的描述符屬性是獨立的(例如,阻止,能夠關閉套接字)。
在您的方案中,其中一個進程確實是可行的,例如,在另一個進程進入選擇狀態之前將其喚醒並從套接字讀取數據。
您的問題實際上根本不受fork()
影響。
如果讀取集中的文件描述符之一是可讀的,則select()
返回。 如果您不讀取它並再次調用select()
,它將仍然可讀。 在沒有更多數據可讀取之前,它將保持可讀性。
換句話說, select()
是級別觸發的,而不是邊緣觸發的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.