Hello,
i have the following network code. If i call the function sendDataToServer, sometimes i get random core dumps. I know its bad code, but its also not mine ... i would be very happy if you guys could help me out. Thank you.
Code:
#include <stdio.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
#include "NetworkHandler.h"
#define RECEIVE_BUFFER 8000
/* "Private" Functions */
char *send_message (int socket, char *message);
int createConnection (char *serv_host, int port);
void close_connection (int socket);
char *send_message (int socket, char *message)
{
int len = strlen (message);
char messageFromSocket [RECEIVE_BUFFER];
char *ret = "";
char *tmpret;
int anzBytesRead, totalBytesRead, status;
status = write(socket, message, len);
if (status <= 0) {
printf ("Error while trying to write to the server.\n");
return ret;
}
read (socket, messageFromSocket, RECEIVE_BUFFER);
return messageFromSocket;
}
int createConnection (char *serv_host, int port)
{
int socket;
struct hostent *host_ptr;
struct sockaddr_in serv_addr;
host_ptr = malloc(sizeof(struct hostent));
/* get the address of the host */
if((host_ptr = gethostbyname(serv_host)) == NULL) {
perror("ERROR: Hostname");
exit(1);
}
if(host_ptr->h_addrtype != AF_INET) {
perror("unknown address type");
return -1;
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr =
((struct in_addr *)host_ptr->h_addr_list[0])->s_addr;
serv_addr.sin_port = htons(port);
/* open a TCP socket */
if((socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("Can't open stream socket");
exit(1);
}
/* connect to the server */
if(connect(socket, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
perror("Can't connect to server");
exit(1);
}
free(host_ptr);
return socket;
}
void close_connection (int socket) {
close (socket);
}
int sendDataToServer(char *dataMessage){
int socket = createConnection("someserver", 2000);
send_message(socket, dataMessage);
close_connection(socket);
}