簡體   English   中英

c select()讀取直到空字符

[英]c select() reading until null character

我正在c中實現代理,並且正在使用select()來不阻止I / O。 有多個客戶端連接到代理,因此我在消息中包含套接字描述符#,以便知道從服務器將答復消息轉發到哪個套接字。

但是,有時read()不會收到完整的消息,直到空字符為止,而是在下一輪select()上發送其余消息。 我想立即收到完整的消息,以便知道轉發答復的套接字(緩沖將不起作用,因為當有多個客戶端時,我不知道哪個消息屬於哪個消息)。 有沒有辦法在等待空字符到達時不阻塞讀取?

TCP中沒有消息。 這是一個字節流協議。 你寫字節,它發送字節,你讀字節。 無法保證您一次可以接收多少字節,也不能保證單次寫入和單次讀取所讀取的數據量之間存在關聯。 如果需要消息,則必須自己實現。 任何給定的讀取都可以讀取零,一個或多個字節,直到緩沖區的長度。 可能只有一半信息。 可能是一條消息。 這完全取決於您。

如果要處理單個消息,請使用ZeroMQ。 它具有對多種語言的綁定,是網絡的絕佳抽象。 實際上,它可以為您處理此代理模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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