我的終端保持創建和分叉。我認爲我在代碼中做了錯誤的事情,實際上當客戶端連接時我想要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