Why do I keep getting bind() error when attempting to execute this server?
By the way, it's meant to get to integers, calculate sum and return sum to client.
Any help appreciated !
Code:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <string.h>
int main (void)
{
int sd, new_sd, sum;
struct sockaddr_un serv_addr;
struct mystruct
{
int addend;
int augend;
} values;
void report_fatal_error (char *message);
sd = socket (AF_UNIX, SOCK_STREAM, 0);
if (sd == -1)
report_fatal_error ("Server: Cannot open socket");
bzero ((char *) &serv_addr, sizeof (serv_addr));
serv_addr.sun_family = AF_UNIX;
strcpy (serv_addr.sun_path, "/tmp/mysocket");
if (bind (sd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == -1)
report_fatal_error ("Server: Binding error in local address"); /* Here is where I get the error */
listen (sd, 5);
while (1)
{
new_sd = accept (sd, NULL, 0);
if (new_sd == -1)
report_fatal_error ("Server: Accept error");
read (new_sd, &values, sizeof (values));
sum = values.addend + values.augend;
printf ("server: %d + %d = %d\n", values.addend, values.augend, sum);
write (new_sd, &sum, sizeof (sum));
close (new_sd);
}
}
void report_fatal_error (char *message)
{
perror (message);
exit (1);
}
PS. Program is not written by me.