当前位置: 技术问答>linux和unix
关于select函数
来源: 互联网 发布时间:2016-07-11
本文导语: socket通讯中select后有时总返回-1,信息是bad file descripter错误。想问一下,造成这种错误的原因有哪些?是程序的逻辑错误导致的还是网络问题导致的呢? | bad file descripter原因是你select的sock...
socket通讯中select后有时总返回-1,信息是bad file descripter错误。想问一下,造成这种错误的原因有哪些?是程序的逻辑错误导致的还是网络问题导致的呢?
|
bad file descripter原因是你select的socket句柄不是一个合法的打开的句柄。
另外被信号中断,select也会返回-1。
另外被信号中断,select也会返回-1。
|
1检查select 第一个参数是否为程序内最大描述符+1
2检查是否初始化文件描述符
最好把代码贴出来
只可能是这两种情况
2检查是否初始化文件描述符
最好把代码贴出来
只可能是这两种情况
|
有完整的core和源代码还是比较容易调试的,直接用gdb。
>gdb 程序文件 -c coredump文件
然后就可以用bt等命令查看当时的调用栈,参数等信息。
如果编译时加入了调试信息(-g)就更方便了。
>gdb 程序文件 -c coredump文件
然后就可以用bt等命令查看当时的调用栈,参数等信息。
如果编译时加入了调试信息(-g)就更方便了。
|
看看是不是FD_SETSIZE 的问题
还有select之前的代码贴出来
还有select之前的代码贴出来
|
在hp-un参考大全内的系统函数调用部分,对select的出错,描述的很清楚
在下列情况下, select() 将会失败并将errno 设置为以下值:
[EBADF] 一个或多个文件描述符集指定了某个文件描述符,而该文件描述符不是有效的打开文件
描述符。如果没有初始化文件描述符集或nfds 参数大于FD_SETSIZE 时,可能会发生
这种情况。
在下列情况下, select() 将会失败并将errno 设置为以下值:
[EBADF] 一个或多个文件描述符集指定了某个文件描述符,而该文件描述符不是有效的打开文件
描述符。如果没有初始化文件描述符集或nfds 参数大于FD_SETSIZE 时,可能会发生
这种情况。