Linux Accept函數(shù)問題說明求指點(diǎn)
系統(tǒng)調(diào)用 accept() 會(huì)有點(diǎn)古怪的地方的!你可以想象發(fā)生 這樣的事情:有人從很遠(yuǎn)的地方通過一個(gè)你在偵聽 (listen()) 的端口連接 (connect()) 到你的機(jī)器。它的連接將加入到等待接受 (accept()) 的隊(duì)列 中。你調(diào)用 accept() 告訴它你有空閑的連接。它將返回一個(gè)新的套接字文 件描述符!這樣你就有兩個(gè)套接字了,原來的一個(gè)還在偵聽你的那個(gè)端口, 新的在準(zhǔn)備發(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ù)運(yùn)行的時(shí)間會(huì)報(bào)告說 Accept error:Invalid argument
EINVAL
根據(jù)我個(gè)人猜測,應(yīng)該是第三個(gè)參數(shù)引起來的。accept的***個(gè)參數(shù)應(yīng)該沒問題,通過函數(shù)輸出***個(gè)參數(shù)是一個(gè)正值,而且此前的bind等函數(shù)都用過,沒問題。
還請(qǐng)各位高手幫忙看看,謝謝了
【編輯推薦】
- Linux 查看磁盤空間實(shí)現(xiàn)代碼介紹
- Linux操作系統(tǒng)需要微軟的十大幫助
- 探尋Linux到底需要多低的配置
- Linux測試工具tcpdump監(jiān)視TCP/IP連接命令介紹
- Linux流量控制實(shí)例應(yīng)用介紹