Re: 請問一個Winsock問題

看板Programming作者時間18年前 (2006/07/13 14:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《fu@ms56.url.com.tw (DX)》之銘言: > "Martini,放兩顆橄欖" <Brad.bbs@bbs.wretch.cc> 撰寫於郵件新聞:4P7MbV$evy@bbs.wretch.cc... > > 我的程式是server-client架構, > > server在每個client連線時,會再另外開一個socket和client傳資料, > > 並且開一個thread將這個socket傳進thread中, > > thread結束後確實將socket關閉..... > > 但問題來了,我的socket拿到的descriptor值會越來越大... > > winsock中的socket descriptor是無號整數,照理說應該只到65535吧, > > 可是我的socke拿到的descriptor值卻一直增加, > > 很多已用過然後關閉的socket descriptor就不會再拿到了,但有的就會, > > 整個程式跑下來一天,socket descriptor值已經到50幾萬了, > > 不知道再這樣run下去會不會有問題, > > 想請問高手們是否知道這個原因呢,謝謝回答 > > PS:我是用VC++ 6.0 , MFC > 你是用_beginthreadex產生新的thread,然後把socket id丟過去 > ,透過id去send or recv嗎? 理論上你正常closesocket之後,socket > id會被釋放,我比較懷疑的是你如果是用_endthrreadex()來結束 > thread的話,沒有同時釋放那個thread handle(使用closehandle()); > 你可以開工做管理員並把相關的欄位打開看看跑的結果. 對阿,我的流程是主程式先開socket -> 產生新的thread -> 把socket id丟過去, 並且有把thread handle存在別的地方, 等thread正常結束 (return掉)之後再使用closehandle()來釋放該handle, 若是在thread結束前,在thread內先closesocket,再讓thread return掉, 則此socket id就再也沒辦法被拿來用, 若是在主程式等thread return掉後,再於主程式中closesocket, 則socket id就我觀察的結果,是會被重複拿來用沒錯, 但用了幾次以後(重複被使用4,5次)就不會再被拿來用, 然後如果再開socket就會再去拿更大的id... 請問您說的工作管理員是指windows的工作管理員嗎? 請問要如何使用它來看程式跑的情況呢? 感謝您的回答 -- 夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子 之器不得已而用之恬淡為上勝而不美而美之者是樂殺人夫樂殺人者則不可得志於天下 矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以 喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫 之令而自均始制有名名亦既有夫亦將知止知止可以不殆pc092018.ccl.itri.org.tw 作者在 06/07/13 14:16:48 pc092018.ccl.itri.org.tw 修改這篇文章
文章代碼(AID): #14jUZa00 (Programming)
文章代碼(AID): #14jUZa00 (Programming)