我希望客户端使用TCP / IP套接字连接与服务器通信。在服务器端接受连接后,将创建子进程。该子进程读取并处理传入的数据。我以为,当我从客户端进行后续写入时,在打开的连接上,如果doSomething进程已经退出,则服务器端将再次进行分叉。但是发生的是,第二个客户端写入(TEST2)写入套接字,并且:
a)写指示没有错误,但是服务器未收到任何信息 或
b)异常管道破损
我有这样的伪代码:
Client socket side:
{
socketFD = socket(AF_INET, SOCK_STREAM, 0);
connect(socketFD, (struct sockaddr *) &serv_addr, sizeof(sockaddr));
write(socketFD, “TEST1”, strlen(“TEST1”));
…….
write(socketFD, “TEST2”, strlen(“TEST2”)); // error: Broken pipe
.....
close(sfd);
}
服务器套接字端:doSomething在派生的子进程上运行:
void doSomething(int socket)
{
int n;
const int bufferSize = 1025;
char buffer[1025];
bzero(buffer,bufferSize);
n = read(sock,buffer,bufferSize-1);
}
对“ TEST2”的写入将失败,并显示消息“管道损坏”。这可能是因为doSomething已经完成。问题是:
答案 0 :(得分:0)
void doSomething(int socket)
{
int n;
char buffer[1024];
do
{
//Normally your process will be blocked here until it receives some data from the client.
//The socket must be under the blocking mode;
n = read(sock,buffer,sizeof(buffer));
...do something with the buffer;
}while(n>0);
}