簡體   English   中英

多端口監聽套接字linux

[英]multiport listening socket linux

我正在編寫一個多線程服務器應用程序,在C(linux)中,它必須偵聽2個不同的端口號,比如偵聽端口號3000和4000,用於連接到它的不同客戶端以提供不同的功能(實際功能由工作人員執行)線程,主線程無限期運行,並在新連接時產生新工作者)。 我不確定select是否可以在這里工作,因為我們可以有多個套接字連接,但都與相同的端口號相關聯。 我嘗試順序綁定到sock_1和sock_2。 當我運行client_1時,一切都按預期工作。 但是,當我運行client_2時,我在客戶端的connect()上收到錯誤。 如果可以在這里使用select(),請告訴我如何操作。 任何幫助非常感謝! 謝謝 !

(PS sock_1指的是端口號3000,sock_2指的是端口號4000,client_1指的是從端口3000尋求服務的客戶端,而client_2指的是從端口號4000從同一服務器尋求服務的客戶端)

你完全誤解了socket和port,這兩個是不同的東西。 端口可以​​有多個套接字。 但您可以將列表套接字(被動套接字)綁定到僅一個端口。 在進一步閱讀之前

如果您希望應用程序在兩個不同的端口上偵聽,請使用它綁定兩個不同的套接字。

對於快速參考,單個進程中的select只能有1024個套接字描述符。 因此,如果您使用的是單個流程模型,那么select只能處理1024個連接。 另請閱讀C10k問題,看看哪些適合您的需求。

如果您的應用程序必須一次接受來自多個套接字的數據,那么使用select()是很好的,因為它將阻塞,直到許多套接字中的任何一個已准備好數據。 select()的另一個好處是你可以設置一個超時值,之后控制權將返回給你,無論任何套接字是否有你的數據。
以下鏈接對您有用:
http://www.softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/unix-socket-faq-2.html

問題20
http://www.scribd.com/doc/7296598/Unix-Network-Programming-Volume-I-The-Sockets-Networking-API-3rd-Edition

第6章:我理解你的應用程序'不需要選擇()'查看以下鏈接的代碼: http//kturley.com/simple-multi-threaded-web-server-written-in-c-using -pthreads /

為代碼中的不同端口調用兩個不同的bind()? 正如@Rahul Gautam在回答中指出的那樣。

暫無
暫無

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

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