What I want to do is send a message (which I type on the terminal) from the client to the server. I’m getting this error on the server when I try to call the recv() function. As you can see, the client doesn’t show errors.
This is the code I’ve written for the server side:
JavaScript
x
#define BUFFERLEN 1024
int main(int argc, char **argv)
{
char name[BUFFERLEN];
int sockfd_serv, sockfd_cli, port;
struct sockaddr_in server_addr, client_addr;
sockfd_serv = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd_serv == -1)
{
perror("Error abriendo el socket");
exit(1);
}
bzero((char *)&server_addr, sizeof(server_addr));
port = atoi(argv[1]);
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(port);
//Asignamos un puerto al socket
if (bind(sockfd_serv, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
{
perror("Error al asociar el puerto a la conexión");
close(sockfd_serv);
return 1;
}
//Ponemos el servidor a escuchar
listen(sockfd_serv, 5);
printf("Escuchando en el puerto %dnn", ntohs(server_addr.sin_port));
while (1)
{
int long_cli = sizeof(client_addr);
//Aceptamos la conexión de un cliente
if (accept(sockfd_serv, (struct sockaddr *)&client_addr, &long_cli) == -1)
{
perror("Error al aceptar conexión");
close(sockfd_serv);
return 1;
}
printf("Conectado con %s:%dn", inet_ntoa(client_addr.sin_addr), htons(client_addr.sin_port));
int nombre = recv(sockfd_cli, &name, BUFFERLEN, 0);
if (nombre == -1)
{
perror("Name error");
return 1;
}
printf("%s", name);
}
return 0;
}
I’m confused because I’m already checking that the socket is created properly. What does “non-socket” refers to?
Advertisement
Answer
You never initialize sockfd_cli
. Odds are, it’s zero, and that’s your standard input terminal and not a socket. You need to store the return value from accept
in sockfd_cli
.