当前位置: 技术问答>linux和unix
recv()调用,bad file descriptor
来源: 互联网 发布时间:2016-08-02
本文导语: 服务器使用select()模型,把可读的套接字及可写的套接字分别放入共享内存的读套接字队列及写套接字队列。由两个子进程从共享内存中读出可读和可写套接字分别处理读套接字和写套接字。 问题:客户端连上服务...
服务器使用select()模型,把可读的套接字及可写的套接字分别放入共享内存的读套接字队列及写套接字队列。由两个子进程从共享内存中读出可读和可写套接字分别处理读套接字和写套接字。
问题:客户端连上服务器后向服务器发送数据,服务器主进程把可读的套接字放入共享内存的读套接字队列中,然后子进程从共享内存中读出套接字,然后用该套接字调用recv()读数据。程序返回错误,错误码提示是bad file descriptor。请问是什么原因呢?
另外想问FD_ISSET(),
select(maxFd + 1, &readSet, &writeSet, NULL, NULL);
某个连接上来的套接字connectfd,客户端并没有发送任何数据,为什么用FD_ISSET(connectfd, &readSet)判断总是返回该套接字可读呢?
问题:客户端连上服务器后向服务器发送数据,服务器主进程把可读的套接字放入共享内存的读套接字队列中,然后子进程从共享内存中读出套接字,然后用该套接字调用recv()读数据。程序返回错误,错误码提示是bad file descriptor。请问是什么原因呢?
另外想问FD_ISSET(),
select(maxFd + 1, &readSet, &writeSet, NULL, NULL);
某个连接上来的套接字connectfd,客户端并没有发送任何数据,为什么用FD_ISSET(connectfd, &readSet)判断总是返回该套接字可读呢?
|
在子进程创建之后,父进程又打开的新的套接字子进程应该无法再直接使用了。
|
父进程里的连接,检测到数据后,子进程去recv?
这样应该不行吧?每个进程都有缓冲区数据,select检测到的数据又不在子进程的缓冲区,不能用子进程去读吧。你可以在父进程里读出来后,写入共享内存,给子进程。
这样应该不行吧?每个进程都有缓冲区数据,select检测到的数据又不在子进程的缓冲区,不能用子进程去读吧。你可以在父进程里读出来后,写入共享内存,给子进程。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。