|
藍森林 http://www.lslnet.com 2006年8月08日 13:08
socket()的問題請教大家
在程序中有以下語句:
socket(AF_UNIX, SOCK_STREAM, 0);
此程序可正常執行;當sco系統中運行50個該程序後,此函數返回-1。errno=2;
請問各位大蝦解決方法。謝謝先! |
socket()的問題請教大家
調整NOFILES,你需要的socket個數加上20一般就差不多了,20個給系統用
對於需要很多文件句柄的大應用(凡是返回fd的系統調用都會佔一個文件系統句柄),
建議直接調到512以上 |
socket()的問題請教大家
-->
NOFILES早已改為2000,而且作了測試程序,不停調socket(),至少能循環1000次,但不知為什麼啟動此進程50個就不行呢?跟蹤程序中socket()的成功返回值最大也就200多呀。
另外擴過內存,一點影響也沒有。 |
socket()的問題請教大家
還有MAXUP啊,一個進程佔一個,當然用socket的還有Streams參數需要設置
檢查-1時的全局變量errno等於多少
可用perror打印錯誤原因,然後再調整對應參數,肯定是內核資源配置不足的原因 |
socket()的問題請教大家
謝謝CNL版主,我也覺得是配置的問題。但是NOFILES=2000,MAXUP=500都不小了,以下是mtune中stream的設置是系統缺省值沒改過,好像也不小。請CNL版主再幫我看看還有什麼可改的?
* Streams Parameters
NSTREAM 64 1 32768
NSTRPUSH 9 9 9
NMUXLINK 192 1 4096
STRMSGSZ 16384 4096 524288
STRCTLSZ 1024 1024 1024
STRMAXBLK 524288 4096 524288
NSTRPAGES 500 0 8000
STRSPLITFRAC 80 50 100
NLOG 3 3 3
NUMSP 64 1 256
NUMTIM 16 1 8192
NUMTRW 16 1 8192
另外:錯誤碼為2,即ENOENT (/* No such file or directory )。 |
socket()的問題請教大家
等出現-1時
# netstat -m
看最後一列fail,如果有調整對應的內核參數
NSTREAM的默認值一般都不夠,需要加大。
另外正常情況socket調用失敗errno也不應該是-2
在socket調用=-1後直接用perror("socket")看具體錯誤信息,
我懷疑你程序其他地方寫的有問題。 |
| |