hey cara, nao sei se entendi direito o que voce ker, mas a funcao inet_ntoa faz isso, aki vai um programa q fiz:

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<arpa/inet.h>

main(int argc, char *argv[])

{
int sock;
struct sockaddr_in server, cliente;
int tamanho;


if(argc != 2)

{

printf("%s <porta>\n",argv[0]);

exit(EXIT_FAILURE);
}

sock = socket(AF_INET, SOCK_STREAM, 0);

server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(atoi(argv[1]));
server.sin_family = AF_INET;

bind(sock, (void *)&server, sizeof(server));

listen(sock, 5);

tamanho = sizeof(struct sockaddr_in);

accept(sock, (void*)&cliente, &tamanho);

printf("%s",inet_ntoa(cliente.sin_addr));

close(sock);

}


se quiser, pode colocar um loop infinito antes de accept pra nao fechar a porta após a conexao, t+