Chinaunix

标题: socket编程问题 [打印本页]

作者: tianhailong    时间: 2008-11-11 16:07
标题: socket编程问题
int initsockid, newsockid;
if ((initsockid = socket(....)) < 0)  //创建套接字
    error("can't create socket";
if (bind(initsockid,....) < 0)           //绑定
    error("bind error";
if (listen(initsockid , 5) < 0)          //监听
    error("listen error";

for (;
    {
         newsockid = accept(initsockid, ...) /* 阻塞 */
         if (newsockid < 0)
         error("accept error";
         if (fork() == 0)
        { /* 子进程 */
                closesocket(initsockid);----------子进程中为什么要关闭initsockid监听套接字??
                do(newsockid); /* 处理请求 */
                exit(0);
    }
    closesocket(newsockid); /* 父进程 */  ------此处父进程中为什么不关闭initsockid套接字??
}

小弟刚接触网络编程,基础不好,请赐教!
作者: hightman    时间: 2008-11-11 17:29
1. 子进程不关闭 initsockid 也是可以的, 但这个 initsockid对于子进程来不再有作用, 所以就关闭它了. (如果要用它还需要与父进程处理好同步关系)

2. 父过程还要用 initsockid 继续监听和接受基它连接, 怎么可以 close initsockid呢, 关闭 newsockid 原因和上面一样

文件描述符(fd)和socket fd 都是用一个少一个的, 有的还有限制, 所以没用的描述字就尽快关闭, 以便再利用....
作者: tianhailong    时间: 2008-11-11 17:43
谢谢,子进程不再需要监听所以关闭监听套接字,知道了!
作者: hightman    时间: 2008-11-11 17:54
原帖由 tianhailong 于 2008-11-11 17:43 发表
谢谢,子进程不再需要监听所以关闭监听套接字,知道了!


是啊鉴听是父进程负责的嘛, 子进程马上转到do()干活了, do完就exit()了啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2