关于SOCKET释放端口的问题!!!

wjphit 2004-08-19 09:50:39
signal(SIGCLD,SIG_IGN);
while(1)
{
memset(&addr_client, 0, sizeof(addr_client));
inaddrlen = sizeof(struct sockaddr_in);
sockClient = accept(socklisten,(struct sockaddr*)(&addr_client),&inaddrlen);
if(sockClient==-1)
{
WriteLogFile("Error on accept of socklisten.\n");
}
memset(szIp, 0, sizeof(szIp));

sprintf(szIp,"%s",inet_ntoa(addr_client.sin_addr));

while( ReadSequence(SEQUTYPE)<0)
{
printf("system connect count is max!\n");
/*WriteLogFile("System is busy.\n"); */
sleep(1);
}

if((iFork=fork())==0)
{
SearchRecord();
WriteSequence(SEQUTYPE);
close(sockClient);
exit(0);
}
else if(iFork<0)
{
WriteLogFile("Error: on fork child processs.\n");
close(sockClient);
}
}/*end of for*/
...全文
446 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
collide 2004-08-19
  • 打赏
  • 举报
回复
这个问题要看linux是否把socket当作文件一样对待,以及fork出的子进程是否继承父进程的socket描述符,就像文件,子进程,父进程关闭各自的文件描述符,互不影响。
wjphit 2004-08-19
  • 打赏
  • 举报
回复
这样不是关闭2次吗,再一个,如果主进程先关闭了,子进程里的socket的接受和发送不是
做不了了吗,请高手指点!
boxban 2004-08-19
  • 打赏
  • 举报
回复
if ((iFork = fork()) == 0){
//...
close(sock);
}else if (iFork < 0){
//error
}
close(sock);

wjphit 2004-08-19
  • 打赏
  • 举报
回复
close(sockClient);子进程已经关闭了
samstay 2004-08-19
  • 打赏
  • 举报
回复
要在子进程中关闭SOCKET(close(socklisten);)
a光关CLIENT不行
铖邑 2004-08-19
  • 打赏
  • 举报
回复
要在子进程中关闭SOCKET(close(sockClient);)
wjphit 2004-08-19
  • 打赏
  • 举报
回复
我发现我SOCKET的端口是9120,但是我发现端口一直占用,没有释放,是怎么回事?

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧