网络daemon程序的问题
fork...
setsid...
fork...
chdir...
umask...
daemon基本成形,问题在接下来这步:
for (int i = 0; i < 3; i++)
close(i);
int sock = socket(...); // 失败,errno为9, EBADF, 无效文件描述符
经测试,失败可能是由于关闭了0,1,2引起的,暂时修改如下:
for (int i = 0; i < 3; i++)
close(i);
int file = open(...); // file值是1
int sock = socket(...); // 成功了
这样虽然能暂时解决问题,但让人很不爽,万一没有需要打开的文件呢?
大家有没有遇到这样的问题,你们是怎么解决的?
------解决方案--------------------我的0,1,2关闭了都没有问题.