簡體   English   中英

選擇叉后閱讀

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM