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