我的终端保持创建和分叉。我认为我在代码中做了错误的事情,实际上当客户端连接时我想要fork,但是当我启动服务器时,当我使用linux命令“ps”进行检查时,其状态保持不变,如何更改我的代码以使其工作正常。C - 我的程序保持叉不停,崩溃我的终端
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/un.h>
#include <sys/types.h>
#include <sys/socket.h>
using namespace std;
int main()
{
int serverFd;
int clientFd;
int serverLen;
int clientLen;
string message;
string serverSockAddrPtr;
struct sockaddr* serverSockAddressPnt;
struct sockaddr* clientSockAddressPnt;
struct sockaddr_un serverAddress;
struct sockaddr_un clientAddress;
// SOCKET CREATION PART - SERVER
serverFd = socket (AF_LOCAL, SOCK_STREAM, 0);
/* Set domain type */
serverAddress.sun_family = AF_LOCAL;
/* Set name */
strcpy (serverAddress.sun_path, "CountryServer");
/* GET SIZE OF Server Addres */
serverLen = sizeof serverAddress;
/* GET SIZE OF Client Addres */
clientLen = sizeof clientAddress;
/* Get Server Sock Address Pointer*/
serverSockAddressPnt = (struct sockaddr *) &serverAddress;
/* Get Client Sock Address Pointer*/
clientSockAddressPnt = (struct sockaddr *) &clientAddress;
/* Create file */
bind (serverFd, serverSockAddressPnt , serverLen);
/* listen for connection */
listen (serverFd,5);
// SOCKET CREATION END - SERVER
while(1)
{
//accept client connection
clientFd = accept(serverFd, clientSockAddressPnt, (socklen_t*)&clientLen);
if(fork()==0)
{
message="Successfully connected to the server";
write(clientFd,message.c_str(),strlen(message.c_str())+1);
close(clientFd);
exit(0);
}
else
close(clientFd);
}
return 0;
}
我的问题是: 如何使服务器创建一个进程时,他们连接到处理客户查询。
我不希望它没有理由继续分叉。 感谢所有帮助,这是我的第一个C编码,以更多地了解编程。
我的客户端和服务器通过localhost,sockaddr_un进行通信,而不是互联网。
听起来像你叉炸自己? – Mysticial 2012-08-02 03:34:37
是的,我做了,我该如何修复它哈哈,我是新来C编程 – 2012-08-02 03:39:35
@Mysticial:不是一个叉炸弹,它会导致机器崩溃,只是连续分岔(一次一个)的孩子,因为“accept”的返回值不会检查错误。 – bstpierre 2012-08-02 03:45:45