- 论坛徽章:
- 0
|
#include <iostream.h>
#include <netinet/in.h>
#include<arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/socket.h>
int main()
{
pid_t pid;
int iSocket,iReturn;
struct sockaddr_in seraddr;
int nbytes;
char sendbuf[1024];
char recvbuf[2048];
seraddr.sin_port = htons(10001);
seraddr.sin_family = AF_INET;
seraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
iSocket = socket(AF_INET,SOCK_STREAM,0);
if(iSocket < 0)
{
perror("create socket error:");
return -1;
}
if ((pid = fork ()) > 0)
{
sleep(20);
cout<<"parent iSocket="<<iSocket<<endl;
if(connect(iSocket,(struct sockaddr *)&seraddr, (int)sizeof(struct sockaddr_in)) < 0)
{
perror("parent connect server error:");
return -1;
}
close(iSocket);
exit(0);
}//exit (0);
else
{
cout<<"parent iSocket="<<iSocket<<endl;
if(connect(iSocket,(struct sockaddr *)&seraddr, (int)sizeof(struct sockaddr_in)) < 0)
{
perror("child connect server error:");
return -1;
}
close(iSocket);
exit(0);
}
}
hp unix 下结果是parent connect server error:: Socket is already connected
fork子进程复制父进程的资源,为什么子进程close(socket)后,父进程还是连接状态,请大家帮忙分析下 |
|