簡體   English   中英

C中每個連接線程的登錄超時

[英]Login timeout for thread-per-connection approach in C

我正在編寫一個游戲服務器,該服務器使用每個連接線程方法最多允許1100個並發連接。 每次從客戶端套接字讀取登錄數據包時,我希望能夠給它5秒鍾的連接時間,否則,請從容進行連接並將線程釋放到池中。

我知道用於向進程發送SIGALRM的alarm(),但是哪個線程接收信號是未定義的行為。 我也嘗試了setitimer函數,但它也將信號發送到進程。 在所有線程中都阻塞信號是不可能的,因為我們需要在所有5個線程中都獲取信號。

是否有任何方法可以在不更改整個服務器體系結構的情況下進行?

注意:這不是個人項目,因此不能更改每個連接線程模型,請考慮這些答案。

由於您發現的原因,線程和信號不能很好地混合使用-不確定哪個線程將接收信號。

在線程中超時的一種更好的方法是將套接字設置為非阻塞模式 ,然后在select()recv()周圍運行while循環。 select()使用timeout參數,以確保select()將在您的5秒最后期限結束時醒來,將套接字作為read-fd_set參數的一部分傳遞,並記住如果連接是TCP ,套接字中的數據可能會分成多個小塊(因此while循環會將它們全部收集到緩沖區中)。

暫無
暫無

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

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