2009年2月10日 星期二

linux socket API: accept() Invalid argument

在使用linux socket API accept()時出現了error: Invalid argument
我的server是寫成concurrent的 用create thread的方式
上網找了資料 發現有人也有一樣的error message 他用fork child process的方式寫concurrent server
但神奇的是 只要把fork動作拿掉 accept()就不會出現error
我在我的multi thread server下試 沒錯 把create thread動作去掉 accept就成功

難道不讓人寫concurrent server了阿? 網上有人甚至懷疑是系統的問題
不死心 再找資料 結果發現有人說accept第三個參數 最好要先初始化 不然會有問題
我試了之後 accept()成功了!!!(驚)
man 了 accept()這個API 結果在man page裡就有說第三個參數要初始化= =
真是, 困擾我近一天的bug就這樣解了= =
不過為什麼會在未初始化的狀態下 concurrent會出錯而iterative就不會出錯?
這可能要去看accept的實作才會知道吧!