[C] socket restituisce sempre -1

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
ArcherD
Prode Principiante
Messaggi: 2
Iscrizione: giovedì 12 giugno 2014, 10:05

[C] socket restituisce sempre -1

Messaggio da ArcherD »

Qualcuno sa spiegarmi perchè socket restituisce sempre -1

Codice: Seleziona tutto

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

struct param
{
	int sock_d;
	struct sockaddr_in sock_a;
};

void *th_main(void *arg)
{
	struct param *par= (struct param *)arg;
	char send_data[1024];
	char recv_data[1024];
	int rw;

	while(1)
	{
		printf("\n>> ");
		gets(send_data);

		send(par-> sock_d,send_data,strlen(send_data),0);
		
		rw= recv(par-> sock_d,recv_data,sizeof(recv_data),0);
		recv_data[rw]= '\0';
		
		printf("\n<< %s",recv_data);	
	
	}
	
	close(par-> sock_d);
	pthread_exit(0);
}

int main()
{

int sock_fd,sock_st;
int val= 1;
int port= 5000;
socklen_t leng;
struct sockaddr_in serv,client;
struct param *par= (struct param *)malloc(sizeof(struct param));

if(sock_fd= socket(AF_INET,SOCK_STREAM,0)== -1);
{
	printf("\nsocket [error]");
	return -1;
}

if(setsockopt(sock_fd,SOL_SOCKET,SO_REUSEADDR,&val,sizeof(int))== -1)
{
	printf("\nset [error]");
	return -2;
}

memset((void *)&serv,0,sizeof(serv));
serv.sin_family= AF_INET;
serv.sin_port= htons(port);
serv.sin_addr.s_addr= INADDR_ANY;
bzero(&(serv.sin_zero),8);

if(bind(sock_fd,(struct sockaddr *)&serv,sizeof(struct sockaddr))== -1)
{
	printf("\nbind [error]");
	return -3;
}

if(listen(sock_fd,5)== -1)
{
	printf("\nlisten [error]");
	exit(0);
}

printf("\nTCP Server Waiting for client on port 5000");
fflush(stdout);

for(;;)
{
	leng= sizeof(client);
	if(sock_st= accept(sock_fd,(struct sockaddr *)&client,&leng)== -1)
		printf("\naccept [error]");
	else
	{
		printf("\nI got a connection from(%s,%d)",inet_ntoa(client.sin_addr),ntohs(client.sin_port));
		par-> sock_d= sock_st;
		par-> sock_a= client;

		pthread_t tid;
		pthread_create(&tid,NULL,th_main,par);
		pthread_detach(tid);
	}
}

close(sock_fd);

return 0;
}
OverMe
Prode Principiante
Messaggi: 185
Iscrizione: sabato 13 gennaio 2007, 22:26

Re: [C] socket restituisce sempre -1

Messaggio da OverMe »

Codice: Seleziona tutto

if(sock_fd= socket(AF_INET,SOCK_STREAM,0)== -1);
c'è un ; di troppo e un paio di parentesi in meno (in questo modo effettua prima il confronto)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti