我正在编写一些客户端/服务器风格的程序.现在我正在开发服务器端,我打开一个套接字.
但是,我需要知道谁在我的插座中连接.什么IP连接.因为我需要输入在服务器上连接的日志.
所以,我的问题是如何在C中执行此操作?使用Linux.
我尝试使用getsockopt()
但不起作用.我是网络编程的新手.
有人知道我该怎么办?
这是我的socket的代码:
int init_socket() { /** Declara um socket */ Socket sock; /** Inicia o socket */ sock.socket = socket(AF_INET, SOCK_STREAM, 0); /** Seta zeros no sockaddr */ memset(&sock.server, 0, sizeof (sock.server)); /** E tambem no buffer */ memset(sock.buff, 0, sizeof (sock.buff)); /** Seta os valores do sockaddr */ sock.server.sin_family = AF_INET; sock.server.sin_addr.s_addr = htonl(INADDR_ANY); //sock.server.sin_port = htons(get_config_int(&conf, "monitor_port")); sock.server.sin_port = htons(2200); /** Chama o bind */ bind(sock.socket, (struct sockaddr*) &sock.server, sizeof (sock.server)); /* * É um socket blocante, então espera encher o buffer * Faz o listen */ if (listen(sock.socket, 2) == -1) { /** Deu falha na preparação para o accept, insere nos logs */ insert_log(FATAL, LOG_KERNEL, "Não foi possível iniciar o socket - event.c"); /** Retorna falha */ return INIT_SOCKET_FAILED; } /** Se chegar aqui, faz o accept, dentro de um loop infinito */ connect: while ((sock.conn = accept(sock.socket, (struct sockaddr*) NULL, NULL))) { printf("Recebi uma conexão, começando comunicação...\n"); /** Agora conn é um file descriptor, podemos ler e gravar nele */ while (1) { if (read(sock.conn, sock.buff, sizeof (sock.buff)) == 0) { close(sock.conn); printf("Pronto para outra conexão...\n"); goto connect; } printf("Eu Li isso do Buffer: %s", sock.buff); /** Limpa o buffer */ memset(sock.buff, 0, sizeof (sock.buff)); sleep(1); } } return INIT_SOCKET_SUCCESS; }
感谢帮助!