Linux Accept函數(shù)問題說明求指點
系統(tǒng)調(diào)用 accept() 會有點古怪的地方的!你可以想象發(fā)生 這樣的事情:有人從很遠的地方通過一個你在偵聽 (listen()) 的端口連接 (connect()) 到你的機器。它的連接將加入到等待接受 (accept()) 的隊列 中。你調(diào)用 accept() 告訴它你有空閑的連接。它將返回一個新的套接字文 件描述符!這樣你就有兩個套接字了,原來的一個還在偵聽你的那個端口, 新的在準備發(fā)送 (send()) 和接收 ( recv()) 數(shù)據(jù)。這就是Linux Accept函數(shù)的過程!
Linux Accept函數(shù)代碼片段如下:
- struct sockaddr addrc;
- int fdc;
- socklen_t len=sizeof(struct sockaddr_in);
- fdc=accept(fds,(struct sockaddr*)&addrc,&len);
- if(fdc==-1)
- {
- fprintf(stderr,"Accept error:%s\n",strerror(errno));
- switch(errno)
- {
- case EBADF:
- printf("EBADF\n");
- break;
- case EFAULT:
- printf("EFAULT\n");
- break;
- case ENOTSOCK:
- printf("ENOTSOCK\n");
- break;
- case EOPNOTSUPP:
- printf("EOPNOTUPP\n");
- break;
- case EPERM:
- case ENOBUFS:
- case ENOMEM:
- printf("THis\n");
- case EINVAL:
- printf("EINVAL\n");
- break;
- default:
- printf("Other\n");
- }
- exit(1);
Linux Accept函數(shù)運行的時間會報告說 Accept error:Invalid argument
EINVAL
根據(jù)我個人猜測,應該是第三個參數(shù)引起來的。accept的***個參數(shù)應該沒問題,通過函數(shù)輸出***個參數(shù)是一個正值,而且此前的bind等函數(shù)都用過,沒問題。
還請各位高手幫忙看看,謝謝了
【編輯推薦】
- Linux 查看磁盤空間實現(xiàn)代碼介紹
- Linux操作系統(tǒng)需要微軟的十大幫助
- 探尋Linux到底需要多低的配置
- Linux測試工具tcpdump監(jiān)視TCP/IP連接命令介紹
- Linux流量控制實例應用介紹