如果我運行我的下面的套接字服務器程序,它不會等待客戶端在「接受」階段的連接,而是開始運行在無限循環中。我的節目被保存爲server.c,我試圖在命令行中使用下面的命令來運行它:套接字服務器程序不等待客戶端處於「接受」階段並在無限循環中運行
$ ./server /tmp/socket
全套接字服務器代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
int server (int client_socket)
{
while (1) {
int length;
char* text;
if (read (client_socket, &length, sizeof (length)) == 0)
return 0;
text = (char*) malloc (length);
read (client_socket, text, length);
printf ("%s\n", text);
free (text);
if (!strcmp (text, "quit"))
return 1;
}
}
int main (int argc, char* const argv[])
{
const char* const socket_name = argv[1];
int socket_fd;
struct sockaddr_un name;
int client_sent_quit_message;
socket_fd = socket (PF_LOCAL, SOCK_STREAM, 0);
name.sun_family = AF_LOCAL;
strcpy (name.sun_path, socket_name);
bind (socket_fd, (struct sockaddr*)&name, SUN_LEN (&name));
listen (socket_fd, 5);
do {
struct sockaddr_un client_name;
socklen_t client_name_len;
int client_socket_fd;
client_socket_fd = accept (socket_fd, &client_name, &client_name_len);
client_sent_quit_message = server (client_socket_fd);
close (client_socket_fd);
}
while (!client_sent_quit_message);
close (socket_fd);
unlink (socket_name);
return 0;
}
'爲什麼我們需要寫下面三行?'你知道一些'C'的基本概念嗎? 'malloc'和'free'是'c'的基本概念。用[這個鏈接]刷新你的想法(http://www.programiz.com/c-programming/c-dynamic-memory-allocation) –
理解malloc和free很容易,但是你能解釋這些行是如何實際的加工? @Jayesh – user3751012
如果你很容易理解你,那麼只要使用它即可。你一定有想法。 –