Gracias por vuestras respuestas, estoy ya hecho un lio, os pongo los sources:
Esta es la librería ss.c:
- #include <stdlib.h> 
- #include <stdio.h> 
- #include <sys/types.h> 
- #include <sys/socket.h> 
- #include <netinet/in.h> 
- #include <netdb.h>   
- #include <arpa/inet.h> 
- #include <unistd.h> 
- #include <strings.h> 
- #include "ss.h" 
- /* El número máximo de datos en bytes */ 
-   
- int fd, fd_client, fd_server; 
-   
- int client(char ip[25], int port) 
- { 
-   
-    /* ficheros descriptores */ 
-   
-    char buf[MAXDATASIZE];   
-    /* en donde es almacenará el texto recibido */ 
-   
-    struct hostent *he;          
-    /* estructura que recibirá información sobre el nodo remoto */ 
-   
-    struct sockaddr_in server;   
-    /* información sobre la dirección del servidor */ 
-   
-    if ((he=gethostbyname(ip))==NULL){        
-       /* llamada a gethostbyname() */ 
-       printf("gethostbyname() error\n"); 
-       return(1); 
-    } 
-   
-    if ((fd=socket(AF_INET, SOCK_STREAM, 0))==-1){   
-       /* llamada a socket() */ 
-       return(1); 
-    } 
-   
-    server.sin_family = AF_INET; 
-    server.sin_port = htons(port);  
-    /* htons() es necesaria nuevamente ;-o */ 
-    server.sin_addr = *((struct in_addr *)he->h_addr);   
-    /*he->h_addr pasa la información de ``*he'' a "h_addr" */ 
-    bzero(&(server.sin_zero),8); 
-   
-    if(connect(fd, (struct sockaddr *)&server, 
-       sizeof(struct sockaddr))==-1){  
-       /* llamada a connect() */ 
-       return(1); 
-    } 
-    return(0); 
-   
- } 
-   
- int server(int port) { 
-   
-    struct sockaddr_in server;  
-    /* para la información de la dirección del servidor */ 
-   
-    struct sockaddr_in client;  
-    /* para la información de la dirección del cliente */ 
-   
-    int sin_size; 
-   
- /* A continuación la llamada a socket() */ 
-    if ((fd_server=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {   
-       printf("error en socket()\n"); 
-       return(1); 
-    } 
-   
-    server.sin_family = AF_INET;          
-   
-    server.sin_port = htons(port);  
-   
-    server.sin_addr.s_addr = INADDR_ANY;  
-    /* INADDR_ANY coloca nuestra dirección IP automáticamente */ 
-   
-    bzero(&(server.sin_zero),8);  
-    /* escribimos ceros en el reto de la estructura */ 
-   
-   
-    /* A continuación la llamada a bind() */ 
-    if(bind(fd_server,(struct sockaddr*)&server, 
-            sizeof(struct sockaddr))==-1) { 
-       return(1); 
-    }      
-   
-    if(listen(fd_server,2) == -1) {  /* llamada a listen() */ 
-       printf("error en listen()\n"); 
-       return(1); 
-    } 
-   
-    sin_size=sizeof(struct sockaddr_in); 
-       /* A continuación la llamada a accept() */ 
-       if ((fd_client = accept(fd_server,(struct sockaddr *)&client, 
-                         &sin_size))==-1) { 
-          printf("error en accept()\n"); 
-         return(1); 
-       } 
-       return(0); 
-   } 
-   
Estos sus headers en un fichero .h:
- #define MAXDATASIZE 100 
- extern int fd; 
- extern int fd_client; 
- extern int fd_server;    
- int client(char[], int); 
- int server(int); 
-   
Este es el server:
- #include <stdlib.h> 
- #include <stdio.h> 
- #include <sys/types.h> 
- #include <sys/socket.h> 
- #include <netinet/in.h> 
- #include <netdb.h>   
- #include <arpa/inet.h> 
- #include <unistd.h> 
- #include <strings.h> 
- #include "ss.h" 
-   
- int fd_client; 
- int fd_server; 
-   
- void main() { 
-   
- if((- server (3550))==1) printf("hubo un fallo abriendo el socket");
 
-   
- while(1) send(fd_client, "hola", 100, 0); 
-   
- close(fd_client); 
- } 
-   
Y este el cliente:
- #include <stdlib.h> 
- #include <stdio.h> 
- #include <sys/types.h> 
- #include <sys/socket.h> 
- #include <netinet/in.h> 
- #include <netdb.h>   
- #include <arpa/inet.h> 
- #include <unistd.h> 
- #include <strings.h> 
- #include "ss.h" 
-   
- void main() { 
-   
- int fd; 
- char buf[100]; 
- int numbytes; 
-   
- if((- client ("localhost", 3550))==1) printf("hubo un fallo abriendo el socket");
 
- while(1){ 
-     if((- numbytes =- recv (- fd ,- buf ,100,0))==-1) printf("error recv");
 
-   
-    buf[numbytes]='\0'; 
-   
-    } 
- close(fd); 
- } 
-   
Saludos.